代碼思路來自https://leetcode-cn.com/problems/restore-ip-addresses/solution/bao-li-he-hui-su-by-powcai/
將java的代碼學習並修改成了C++代碼備查
solution:
class Solution {
public:
vector<string> restoreIpAddresses(string s) {
vector<string> res;
int n = s.length();
backtrack(0, "", 4, s, res, n);
return res;
}
void backtrack(int i, string tmp, int flag, string s, vector<string> &res, int n) {
if (i == n && flag == 0) {
res.push_back(tmp.substr(0, tmp.length() - 1));
return;
}
if (flag < 0) return;
for (int j = i; j < i + 3; j++) {
if (j < n) {
if (i == j && s[j] == '0') {
backtrack(j + 1, tmp + s[j] + ".", flag - 1, s, res, n); //首位是0那麼這一段也就是0,所以直接添加0.並且往下搜索
break; //這是處理第一種情況的處理完成後可以直接退出下面是處理首段不是0的情況
}
if (atoi(s.substr(i, (j+1-i)).c_str()) <= 255) //往下找(j-i+1)個長度的子串
backtrack(j + 1, tmp + s.substr(i, (j+1-i)) + ".", flag - 1, s, res, n);
}
}
}
};