一、题目
二、思路
1、dfs深度搜索
2、剪纸,碰到不符合条件的就退出
3、退出条件:要满足字符数量要求(总数不能超过12位,不能小于4位,每确定一位,都要对后面的进行判断);除只有一个0之外,其余字符数超过1的第一位都不能为0,有三个字符的不能大于255
三、代码
class Solution {
public:
vector<string>res;
vector<string> restoreIpAddresses(string s) {
int len=s.length();
if(len<4 || len>12)
{
return res;
}
string str="";
dfs(s,str,0,0);
return res;
}
void dfs(string &s,string str,int hight,int start)
{
int len= s.length();
if(hight>=4 || (len-start)<(4-hight) || (len-start)>(4-hight)*3)
{
return;
}
if(hight==3 && start<len && len-start<=3 )
{
if(s[start]=='0' && start!=len-1)
{
return;
}
int x=stoi(s.substr(start,len-start));
if(x<=255)
{
res.emplace_back(str+s.substr(start,len-start));
return;
}
}
if(len>start)
{
dfs(s,str+s[start]+'.',hight+1,start+1);
}
if(len>start+1 && s[start]!='0')
{
dfs(s,str+s[start]+s[start+1]+'.',hight+1,start+2);
}
if(len>start+2 && s[start]!='0' && stoi(s.substr(start,3))<=255)
{
dfs(s,str+s.substr(start,3)+'.',hight+1,start+3);
}
}
};