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)
class Solution {
public:
vector<string> restoreIpAddresses(string s) {
vector<string> ret;
if (s.size() < 4) return ret;
reFindNum(s, 0, string(), ret);
return ret;
}
private:
void reFindNum(string s, int n, string ans, vector<string>& ret) {
/* if(n == 4) {
if (s.size() == 0) ret.push_back(ans);
return;
}
*/
size_t len = s.size();
for (size_t i = 1; i <= min(3, int(len - (4 - (n + 1)))); ++i) {
stringstream ss;
ss << s.substr(0, i);
int num;
ss >> num;
// num = num * 10 + s[i - 1] - '0'; 用这个会快一点
if (i > 1 && num < pow(10, i - 1)) break;
if (num <= 255) {
string tmp(ans);
tmp += s.substr(0, i);
if (n == 3) {
if (len == i) {
ret.push_back(tmp);
break;
}
else
continue;
}
else {
tmp += '.';
reFindNum(s.substr(i, len - i), n + 1, tmp, ret);
}
} else
break;
}
return;
}
};