• 注册
当前位置:1313e > 默认分类 >正文

力扣-93题 复原IP地址(C )- 回溯切割

题目链接:https://leetcode-cn.com/problems/restore-ip-addresses/
题目如下:
在这里插入图片描述
在这里插入图片描述

class Solution {
public:vector<string> restoreIpAddresses(string s) {if(s.size()>12) return result;//特判backtracking(s,0,0);return result;}//startIndex必须有,因为不能重复分割,记录下一层递归分割的起始位置//pointNum,用于记录添加逗点的数量//注:题目要求,分为四段,则以传统的以字符长度作为跳出递归的条件不符合题意,应该以分的段数作为条件判断是否退出递归void backtracking(string s,int startIndex,int pointNum){if(pointNum==3){if(isVaild(s,startIndex,s.size()-1)){//判断第四段子字符串是否合法,若合法则放入result.push_back(s);}return ;}for(int i=startIndex;i<s.size();i++){if(isVaild(s,startIndex,i)){//判断区间内的子串是否合法s.insert(s.begin()+i+1,'.');//在i的后面加入一个逗点pointNum++;backtracking(s,i+2,pointNum);pointNum--;s.erase(s.begin()+i+1);}else break;//不合法,则直接结束本层循环}}//判断是否为一个有效段位bool isVaild(string s,int l,int r){if(l>r){return false;}if(s[l]=='0'&&l!=r){//不能以0为开头的数字return false;}int num=0;for(int i=l;i<=r;i++){if(!isdigit(s[i])){//如果不是数字字符return false;}num=num*10+s[i]-'0';if(num>255){//不能大于255return false;}}return true;}
private:vector<string> result;string path;
};

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 162202241@qq.com 举报,一经查实,本站将立刻删除。

最新评论

欢迎您发表评论:

请登录之后再进行评论

登录
相关推荐