(1)回溯+递归
class Solution {
public:
vector<string> vec;
vector<int> v={1,2,3};
public:
bool check(string s) {
if(stoi(s)>255 || (s[0]=='0' && s.size()>1)) return false;
return true;
}
void helper(string s,int k,int l) {
if(k==0 && check(s.substr(l))) {
vec.push_back(s);
return;
} else if(k==0) return;
for(int i=0;i<v.size();i++) {
if(l+v[i]<s.length()) {
if(!check(s.substr(l,v[i]))) continue;
s.insert(l+v[i],1,'.');
helper(s,k-1,l+v[i]+1);
s.erase(l+v[i],1);
}
}
}
vector<string> restoreIpAddresses(string s) {
if(s.length()>12 || s.length()<4) return {};
helper(s,3,0);
return vec;
}
};