LC.93.复原IP地址(简单DFS)
思路:简单 ,注意特殊情况,前导 即可。
class Solution {
public:
vector<string>ans;
string s;
int n;
void dfs(string c,int p,int cnt){
//cout<<"c="<<c<<" p="<<p<<" cnt="<<cnt<<endl;
if(cnt==4){
ans.push_back(c);
return;
}
if(p==n) return;
string tmp;
if(cnt==3){
tmp=s.substr(p);
if(tmp.size()>3||tmp.size()>1&&tmp[0]=='0') return;
int x=stoi(tmp);
if(x>=0&&x<=255) {
if(!cnt)
dfs(c+tmp,n,cnt+1);
else dfs(c+"."+tmp,n,cnt+1);
}
}
else for(int i=1;i<=3&&p+i-1<n;i++){
tmp=s.substr(p,i);
if(tmp.size()>3) continue;
else if(tmp.size()>1&&tmp[0]=='0') continue;
int x=stoi(tmp);
if(x>=0&&x<=255) {
if(!cnt)
dfs(c+tmp,p+i,cnt+1);
else dfs(c+"."+tmp,p+i,cnt+1);
}
}
}
vector<string> restoreIpAddresses(string t) {
s=t;
n=s.size();
dfs("",0,0);
return ans;
}
}sol;