题目:
Given a string containing only digits, restore it by returning all possible valid IP address combinations.
For example:
Given "25525511135"
,
return ["255.255.11.135", "255.255.111.35"]
. (Order does not matter)
思路:
递归循环,类似01背包问题。新的一个字符是和老字符合并还是单独成为新的一位IP。
代码:
class Solution {
public:
vector<string> result;
vector<string> restoreIpAddresses(string s) {
restore(s, vector<int>(), 0);
return result;
}
void restore(string &s, vector<int> cur, int index){
if(cur.size() == 5){
return;
}
if(cur.size() == 4 && index == s.size()){
result.push_back(to_string(cur[0]) + "." + to_string(cur[1]) + "." + to_string(cur[2]) + "." + to_string(cur[3]));
}
cur.push_back(char2int(s[index]));
restore(s, cur, index+1);
cur.pop_back();
if(cur.size() > 0 && cur[cur.size()-1] != 0 && char2int(s[index]) + 10 * cur[cur.size()-1] <= 255)
{
cur[cur.size()-1] = char2int(s[index]) + 10 * cur[cur.size()-1];
restore(s, cur, index+1);
}
}
int char2int(char c)
{
return c - '0';
}
};