思路
用一个vector存放可能的结果,然后用一个变量判断插入点的数量,假设再最后一段后也插入点
代码
class Solution {
public:
vector<string> result;
vector<string> path;
int toNum(string s){
int d = 1;
int result = 0;
for(int i = s.size()-1; i >= 0; i--){
result += ( (char)s[i] - '0' ) * d;
d *= 10;
}
return result;
}
void backTracking(string s, int startIndex, int dotNum){
if(startIndex == s.size() && dotNum == 4){
string ip;
for(int i = 0; i < path.size(); i++){
ip += path[i];
if(i != path.size() - 1) ip += ".";
}
result.push_back(ip);
return;
}
string num_string;
for(int i = startIndex; i < s.size(); i++){
num_string += s[i];
int num = toNum(num_string);
if(to_string(num) != num_string) break;
if(num > 255) break;
path.push_back(to_string(num));
backTracking(s, i+1, dotNum+1);
path.pop_back();
}
return;
}
vector<string> restoreIpAddresses(string s) {
backTracking(s, 0, 0);
return result;
}
};