class Solution {
public:
vector<string> restoreIpAddresses(string s) {
vector<string> res;
helper(s, "", 4, res);
return res;
}
void helper(string s, string out, int n, vector<string>& res){
if(n==0 && !s.empty()) return;
else if(n==0 && s.empty()){
res.push_back(out);
}else if(n==1){
if(isvalid(s, s.size())) helper("", out+s, n-1, res);
}else{
for(int i=1;i<4;i++){
if(i<=s.size()){
string tt = s.substr(0,i);
if(!isvalid(tt, i)) continue;
helper(s.substr(i), out+tt+'.', n-1, res);
}
}
}
}
bool isvalid(string s, int i){
int t = atoi(s.c_str());
if(t>255 || t<0 || to_string(t).size()!=i) return false;
return true;
}
};
Notes
1. k != std::to_string(val).size()
2.atoi(s.c_str()) is better than stoi()<--cannot handle ""