要求:给一串数字组合ip地址
思路:回溯,这题判断条件太多了吐了
ip前三个要注意的条件:
1、不能超过总长度给第四个留位置
2、首位为0只能加一位,不为0要小于等于255
ip第四个要注意的条件:
1、剩下一位可以
2、剩下小于等于3位且首位不为0且小于等于255
class Solution {
public:
void getAll(vector<string> &v,int index,string tmp,string &s,int depth){
if(depth==4){
int lastlen=s.length()-index;
if((lastlen==1)||(lastlen<=3&&s[index]!='0'&&stoi(s.substr(index,lastlen))<=255))
v.push_back(tmp+s.substr(index,lastlen));
return;
}
if(s[index]=='0'){
if(index+1>=s.length())return;
getAll(v,index+1,tmp+s.substr(index,1)+'.',s,depth+1);
}
else{
for(int len=1;len<=3;++len){
if(index+len>=s.length())return;
if(stoi(s.substr(index,len))>255)return;
getAll(v,index+len,tmp+s.substr(index,len)+'.',s,depth+1);
}
}
}
vector<string> restoreIpAddresses(string s) {
if(s=="")return {};
vector<string> v;
getAll(v,0,"",s,1);
return v;
}
};