题解 | #数字字符串转化成IP地址#
数字字符串转化成IP地址
http://www.nowcoder.com/practice/ce73540d47374dbe85b3125f57727e1e
我选择的是在字符串里插入三个点,分割成四块进行暴力搜索,但是要特别注意两点:
- 分割的每一块必须在0~255之间。
- 分割的每一块不能有前导0。
class Solution {
public:
/**
*
* @param s string字符串
* @return string字符串vector
*/
vector<string> restoreIpAddresses(string s) {
// write code here
vector<string>ans;
for (int i = 1; i <= (s.length() >= 3 ? s.length() - 3 : 0); i++) {
for (int j = i + 1; j <= (s.length() >= 2 ? s.length() - 2 : 0); j++) {
for (int k = j + 1; k <= (s.length() >= 1 ? s.length() - 1 : 0); k++) {
string a = s.substr(0, i);
string b = s.substr(i, j - i);
string c = s.substr(j, k - j);
string d = s.substr(k, s.size() - k);
int A = atoi(a.c_str());
int B = atoi(b.c_str());
int C = atoi(c.c_str());
int D = atoi(d.c_str());
if ((a.length() > 1 && a[0] == '0') || (b.length() > 1 && b[0] == '0') ||
(c.length() > 1 && c[0] == '0') || (d.length() > 1 &&
d[0] == '0'))
continue;
if (A >= 0 && A <= 255 && B >= 0 && B <= 255 && C >= 0 && C <= 255 && D >= 0 &&
D <= 255)
ans.push_back(to_string(A) + "." + to_string(B) + "." + to_string(
C) + "." + to_string(D));
}
}
}
return ans;
}
};