题目描述:
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
示例:
输入: "25525511135"
输出: ["255.255.11.135", "255.255.111.35"]
解法:
class Solution {
public:
string convert(string& s, int i, int j, int k, int l){
string s1 = s.substr(0, i);
string s2 = s.substr(i, j);
string s3 = s.substr(i+j, k);
string s4 = s.substr(i+j+k, l);
if(valid(s1) && valid(s2) && valid(s3) && valid(s4)){
return s1 + "." + s2 + "." + s3 + "." + s4;
}else{
return "";
}
}
bool valid(string& s){
int sz = s.size();
if(sz == 0 || sz > 3){
return false;
}else{
if(s[0] == '0'){
return sz == 1;
}else{
if(sz == 3){
return s <= "255";
}else{
return true;
}
}
}
}
vector<string> restoreIpAddresses(string s) {
vector<string> res;
int sz = s.size();
if(sz < 4 || sz > 12){
return res;
}else{
int idx = 0;
for(int i = 1; i <= 3; i++){
if(i > sz - 3){
break;
}
for(int j = 1; j <= 3; j++){
if(i + j > sz - 2){
break;
}
for(int k = 1; k <= 3; k++){
if(i + j + k > sz-1){
break;
}
int l = sz - i - j - k;
if(l > 3){
continue;
}else{
string tmp = convert(s, i, j, k, l);
if(tmp != ""){
res.push_back(tmp);
}
}
}
}
}
return res;
}
}
};