题目:
93. Restore IP Addresses
Given a string containing only digits, restore it by returning all possible valid IP address combinations.
Example:
Input: "25525511135"
Output: ["255.255.11.135", "255.255.111.35"]
思路:
- 递归;
- 分治
代码:
class Solution {
public:
void help(string &s, string path, int id, vector<string> &res, int n){
if(n == 3){
if(id >= s.length())return;
if(s[id] == '0'){
if(id == s.length()-1){
path += "0";
res.push_back(path);
}
return;
}
string tmp = s.substr(id, s.size());
int num = stoi(tmp);
if(num <= 255){
path += tmp;
res.push_back(path);
}
return;
}else if(id >= s.length()){
return;
}else{
string tmp_path;
for(int i = id, k = 1; i < id+3 && id+k-1 < s.length(); ++i, ++k){
string str = s.substr(id, k);
if(str[0] == '0' && str.length() == 1){
tmp_path = path + str + ".";
help(s, tmp_path, i+1, res, n+1);
}else if(str[0] == '0' && str.length() != 1){
break;
}else if(str[0] != '0' && stoi(str) <= 255){
tmp_path = path + str + ".";
help(s, tmp_path, i+1, res, n+1);
}
}
}
}
vector<string> restoreIpAddresses(string s) {
vector<string> res;
if(s.length() < 4 || s.length() > 12)return res;
help(s, "", 0, res, 0);
return res;
}
};
结果:
