隔了几天没写,唉思路速度都跟不上。果然这东西就是不能停
class Solution {
public:
/**
*
* @param s string字符串
* @return string字符串vector
*/
vector<string> restoreIpAddresses(string s) {
std::vector<std::string> res;
// 找出三个点可能的位置三重循环暴力查找
int length = s.size();
// 注意是左闭右开,所以每一层指向的永远是下一层的第一个数字
// 注意循环范围是 < 同样要考虑右开这一因素
for (int i = 1; i < 4 && i < length - 2; ++i) {
for (int j = i + 1; j < i + 4 && j < length - 1; ++j) {
for (int k = j + 1; k < j + 4 && k < length; ++k) {
// 最后的数字长度
if (length - k > 3) {
continue;
}
std::string a = s.substr(0, i);
std::string b = s.substr(i, j - i);
std::string c = s.substr(j, k - j);
std::string d = s.substr(k);
// 每部分的数字大小
if (std::stoi(a) > 255 || std::stoi(b) > 255 || std::stoi(c) > 255 || std::stoi(d) > 255) {
continue;
}
// 前导0的情况
if (a.size() > 1 && a[0] == '0' || b.size() > 1 && b[0] == '0' || c.size() > 1 && c[0] == '0' || d.size() > 1 && d[0] == '0') {
continue;
}
std::string tmp = a + "." + b + "." + c + "." + d;
res.push_back(tmp);
}
}
}
return res;
}
};