1、题目
https://leetcode-cn.com/problems/restore-ip-addresses/
2、题意
题解1:dfs+剪枝
u表示当前的位置0-s.size() k表示已经选了几个数(0-255)了0-4;
判断当前数是否在0-255之间 ps:01这种不能进行选择
class Solution {
public:
vector<string> res;
vector<string> restoreIpAddresses(string s) {
dfs(s,0,0,"");
return res;
}
void dfs(string &s,int u,int k,string path)//u表示当前的位置0-s.size() k表示已经选了几个数(0-255)了0-4;
{
if(u==s.size())
{
if(k==4)
{
path.pop_back();
res.push_back(path);
}
return ;
}
if(k==4) return;//剪枝;
for(int i=u,t=0;i<s.size();i++)
{
if(i>u&&s[u]=='0') break;//有前导0 ps:01
t = t*10+s[i]-'0';
if(t<=255) dfs(s,i+1,k+1,path+to_string(t)+'.');
else break;
}
}
};