思路:dfs,ip地址为4段,每段最大值为255,每次递归判断current_s小于256且有效(不会出现01,001这些),判断最后分段结果是否有效是next_i和s的长度相等
class Solution {
public:
vector<string>res;
int to_int(string s) {
int k = 0;
for (int i = 0; i < s.length(); ++i) {
int temp = s[i] - '0';
k = k * 10 + temp;
}
return k;
}
bool isavailble(string s) {
if (s[0] == '0'&&s.length() > 1)return false;
else return true;
}
void dfs(string s, string temp_s, int current_i, int del_Cnt) {
for (int i = 1; i <= 3; ++i) {
int next_i = current_i + i;
string current_s = s.substr(current_i, i);
if (to_int(current_s) <= 255&&isavailble(current_s))current_s = temp_s + current_s;
else break;
if (del_Cnt < 3) {
current_s += ".";
if (next_i < s.length())dfs(s, current_s, next_i, del_Cnt + 1);
else break;
}
else {
if (next_i == s.length())res.push_back(current_s);
}
}
}
vector<string> restoreIpAddresses(string s) {
string temp = "";
dfs(s, temp, 0, 0);
return res;
}
};