原题链接:Leecode 93. 复原 IP 地址
class Solution {
public:
vector<string> res;
void dfs(string s,string t,int start,int n)
{
if(n==4 && start==s.size())
{
t.pop_back();
res.push_back(t);
return ;
}
for(int len=1;len<=3 && start+len<=s.size();len++)
{
string tmp=s.substr(start,len);
if(tmp[0]=='0' && tmp.size()>1) continue; //不能含有前导0
int num=atoi(tmp.c_str());
if(num>255) continue;//不能大于255
string tt=t; tt+=tmp; tt+='.';
int left=s.size()-start-len;
if(3*(4-n-1)<left) continue;//剪枝
dfs(s,tt,start+len,n+1);
}
}
vector<string> restoreIpAddresses(string s) {
int n=s.size();
if(n<4 || n>12) return res;
dfs(s,"",0,0);
return res;
}
};