题目描述

代码
回溯法
cpp
class Solution {
vector<string> res;
public:
vector<string> restoreIpAddresses(string s) {
string IP;
int part = 0;
backtracking(s,0,IP,part);
return res;
}
void backtracking(const string &s,int start,string &IP,int &part){
if(start == s.size())
{
if(part == 4)
res.push_back(IP);
return;
}
if(part==4)
return;
int iplen = IP.size();
for(int i = start;i < s.size();i++){
if(i >start && s[start]=='0')//前导0的数字不考虑
break;
int temp = atoi(s.substr(start,i-start+1).c_str());
if(temp >255)//大于255的不考虑,后面的只会更大,所以break
break;
IP += (s.substr(start,i-start+1));
if(part<3)
IP.push_back('.');
part++;
backtracking(s,i+1,IP,part);
IP.resize(iplen);
part--;
}
}
};