class Solution {
private:
int length;
public:
void dfs(string s, string &cur, int all, vector<string> &res) {
if (all==3) {
if (s.size()<=3 && s.size()>0) {
int num=getnum(s);
if (num>=0) cur+=s;
if (cur.size()==length) res.push_back(cur);
}
return;
}
int num=0;
string cur_bp=cur;
for (int i=0; i<3 && i<s.size(); i++) {
string t = s.substr(0,i+1);
num=getnum(t);
if (num>=0) {
string n = s.substr(i+1);
cur = cur+t+".";
dfs(n,cur,all+1,res);
cur=cur_bp;
}
}
}
int getnum(string &s) {
int num=0;
if (((s[0]-'0')==0) && s.size()>1) return -1;
for (int i=0; i<s.size(); i++) {
num=num*10+s[i]-'0';
}
if (num<=255) return num;
return -1;
}
vector<string> restoreIpAddresses(string s) {
vector<string> res;
if (s.size()==0) return res;
length=s.size()+3;
string cur="";
dfs(s,cur,0,res);
return res;
}
};Restore IP Addresses
最新推荐文章于 2021-09-03 20:35:52 发布
本文介绍了一种通过深度递归实现的IP地址恢复算法。该算法利用深度优先搜索策略,结合字符串操作,能够将一串不含点号的数字字符串转换为合法的IP地址格式。文章详细解释了算法的具体实现过程,包括如何避免无效的IP段,如前导零和超过255的数值。
1506

被折叠的 条评论
为什么被折叠?



