先判断字符串字符串长度是否处于[4,12]
然后判断字符串将字符串分成从IP地址的第一位进行选择 IP地址每一位最大为255 最小为0 IP地址的每一位所包含的字符串中的位数分别是1 2 3 位 IP位是三位时,要判断是否大于255
void restore(std::vector<std::string> &a,std::string &s,int c,std::string ss,int d){
if(c==s.size()&&d==4) {
ss=ss.substr(0,ss.size()-1);
a.push_back(ss);
return;
}else if(d==4&&c!=s.size())
{
return;
}
std::string ss1="";
ss1+=s[c+0];
ss+=ss1;
ss+=".";
restore(a,s,c+1,ss,d+1);
ss=ss.substr(0,ss.size()-ss1.size()-1);
if(c+1<=s.size()) {
if(s[c]=='0')
return;
ss1 += s[c + 1];
ss += ss1;
ss += ".";
restore(a, s, c + 2, ss, d + 1);
ss = ss.substr(0, ss.size() - ss1.size() - 1);
}
if(c+2<s.size()) {
ss1 += s[c + 2];
int f = std::stoi(ss1);
if (f <= 255) {
ss += ss1;
ss += ".";
} else
return;
restore(a, s, c + 3, ss, d + 1);
}
return ;
}
std::vector<std::string> restoreIpAddresses(std::string s) {
std::vector<std::string> a;
if(s.size()>12||s.size()<4)
return a;
std::string ss="";
int d=0;
restore(a,s,0,ss,d);
return a;
}