答案是借鉴了,评论区大佬的思想,我感觉很好理解,然后自己写一个做个备份,给自己以后看。
思路见下图:
代码如下图,同时附上自己的注释:
class Solution {
public:
bool isjude(string s){//用于判断剩下的s字符串是否满足ip的基本定义
int nm = atoi(s.c_str());
if(s.size()> 1)//当大于1位的时候,则需要判断它首位不为0,同时在(0,255]的范围内
return s[0] != '0' && nm > 0 && nm <= 255;
return nm >= 0 && nm <= 9;//当只有1位时,只需判断是否在【0,9】的范围即可
}
void dfs(string s, string t, vector<string>&ans, int cnt){
if(cnt == 3 && isjude(s)){//前面以及划分好了3段,再将最后一段连接上就行,同时进行定义判定
ans.emplace_back(t + s);
return;
}
for(int i = 1; i <= 3 && i < s.size(); ++i){//i为划分出来的为位数,最高不超过3,同时判断i的位数不能超过剩下字符串长度
string ss = s.substr(0, i);//为了截取长度为i的子串
//对截取的字串进行IP定义判断,若符合条件则进行递归
if(isjude(ss))dfs(s.substr(i), t + ss + '.', ans,cnt + 1);
}
}
vector<string> restoreIpAddresses(string s) {
vector<string>ans;
string t;
dfs(s, t, ans, 0);
return ans;
}
};


京公网安备 11010502036488号