Leetcode 93. Restore IP Addresses (Medium) (cpp)
Tag: Backtracking, String
Difficulty: Medium
/*
93. Restore IP Addresses (Medium)
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> res;
if (s.length() < 4 || s.length() > 12) return res;
generate(s, 0, 4, res, "");
return res;
}
void generate(string s, int start, int cnt, vector<string>& res, string res_sub) {
if (start == s.length() && cnt == 0) {
res_sub.pop_back();
res.push_back(res_sub);
return;
}
if(s.length() - start > 3 * cnt) return;
for (int i = 0; i + start < s.length() && i < 3; i++) {
if (i == 0) generate(s, start + 1, cnt - 1, res, res_sub + s.substr(start, 1) + ".");
if (i == 1 && s[start] != '0') generate(s, start + 2, cnt - 1, res, res_sub + s.substr(start, 2) + ".");
if (i == 2 && stoi(s.substr(start, 3)) > 99 && stoi(s.substr(start, 3)) < 256) generate(s, start + 3, cnt - 1, res, res_sub + s.substr(start, 3) + ".");
}
}
};