class Solution {
public:
vector<string> vec_str;
vector<string> restoreIpAddresses(string s) {
string temp = "";
backtrack(s, 0, 0, temp);
return vec_str;
}
void backtrack(string& s, int i, int n, string& temp){
if(n == 4 || i == s.size()){
if(n == 4 && i == s.size()) //出现4个点并且全部数字已使用,符合情况,添加
vec_str.push_back(temp.substr(0, temp.size() - 1));
return; //否则舍弃
}
for(int j = 0; j < 3; j++){
if(j > 0 && s[i] == '0') return; //避免"1.011.255.245"这种无效地址
if(j == 2 && s.substr(i, 3) > "255") return; //避免"1.111.262.45"这种无效地址
if(i + j + 1 > s.size()) return; //避免下标越界
temp += s.substr(i, j + 1); //截取并添加
temp.push_back('.'); //添加.
//回溯
backtrack(s, i + j + 1, n + 1, temp);
temp = temp.substr(0, temp.size() - j - 2);
}
}
};
Accepted
145/145 cases passed (0 ms)
Your runtime beats 100 % of cpp submissions
Your memory usage beats 98.61 % of cpp submissions (6.2 MB)