LeetCode 93. 复原IP地址
题目
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
示例:
输入: “25525511135”
输出: [“255.255.11.135”, “255.255.111.35”]
分析
只用确认三个点的位置就可以了,所以用三个循环来确定点的位置,如果太大了直接continue,如果一个长度不是1的部分头部是0,也continue。
C++代码
class Solution {
public:
vector<string> restoreIpAddresses(string s) {
vector<string> res;
if(s.length() < 4 || s.length() > 12){
return res;
}
for(int i1 = 0; i1 < s.length() - 3; i1++){
if(s[0] == '0' && i1 != 0){
continue;
}
int t1 = 0;
for(int j = 0; j <= i1; j++){
t1 *= 10;
t1 += s[j] - '0';
}
if(t1 >= 256){
break;
}
for(int i2 = i1 + 1; i2 < s.length() - 2; i2++){
if(s[i1 + 1] == '0' && i2 != i1 + 1){
continue;
}
int t2 = 0;
for(int j = i1 + 1; j <= i2; j++){
t2 *= 10;
t2 += s[j] - '0';
}
if(t2 >= 256){
break;
}
for(int i3 = i2 + 1; i3 < s.length() - 1; i3++){
if(s[i2 + 1] == '0' && i3 != i2 + 1){
continue;
}
int t3 = 0;
for(int j = i2 + 1; j <= i3; j++){
t3 *= 10;
t3 += s[j] - '0';
}
if(t3 >= 256){
break;
}
if(s[i3 + 1] == '0' && i3 + 1 != s.length() - 1){
continue;
}
int t4 = 0;
for(int j = i3 + 1; j <= s.length() - 1; j++){
t4 *= 10;
t4 += s[j] - '0';
if(t4 >= 256){
break;
}
}
if(t4 >= 0 && t4 < 256){
string temp = "";
temp += to_string(t1);
temp += ".";
temp += to_string(t2);
temp += ".";
temp += to_string(t3);
temp += ".";
temp += to_string(t4);
res.push_back(temp);
}
}
}
}
return res;
}
};