递归
class Solution {
public:
void valid(string s,unordered_set<string>& adds,string add,int cnt,int len)
{
if(cnt>4)
return;
if(cnt==4)
{
if(s!="")
return;
if(adds.find(add)==adds.end()&&add.size()==len+3)
adds.insert(add);
}
string tmp="";
for(int i=1;i<=3&&i<=s.size();i++)
{
tmp=s.substr(0,i);
int dig=atoi(tmp.c_str());
string tmp_add=add;
if(dig>=0&&dig<=255)
{
if(tmp_add=="")
tmp_add=to_string(dig);
else
tmp_add+='.'+to_string(dig);
valid(s.substr(i),adds,tmp_add,cnt+1,len);
}
}
}
vector<string> restoreIpAddresses(string s) {
vector<string> adds;
unordered_set<string> st;
string add;
valid(s,st,add,0,s.size());
for(auto it=st.begin();it!=st.end();it++)
adds.push_back(*it);
return adds;
}
};
本文介绍了一种通过递归算法实现的有效IP地址恢复方法。该方法利用C++编程语言,通过对输入字符串进行逐段解析,并验证每段是否符合IP地址规范(0-255),最终组合成合法的IP地址。文章详细展示了递归过程及如何避免无效的IP地址组合。
1512

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



