题目:
Given a string containing only digits, restore it by returning all possible valid IP address combinations.
Example:
Input: "25525511135"
Output: ["255.255.11.135", "255.255.111.35"]
代码1:
class Solution {
public:
bool isValid(string str)
{
if(str.length() > 3 || str.length() < 1 || (str.length() > 1 && str[0] == '0') || stoi(str) > 255)
return false;
return true;
}
vector<string> restoreIpAddresses(string s) {
vector<string> res;
int len = s.length();
for(int i = 1; i < 4 && i <len-2; ++i)
{
for(int j = i + 1; j < i + 4 && j < len - 1; ++j)
{
for(int k = j + 1; k < j + 4 && k < len; ++k)
{
string s1 = s.substr(0,i-0);
string s2 = s.substr(i,j-i);
string s3 = s.substr(j,k-j);
string s4 = s.substr(k,len-k);
if(isValid(s1) && isValid(s2) && isValid(s3) && isValid(s4))
{
string temp = s1 + "." + s2 + "." + s3 + "." + s4;
res.push_back(temp);
}
}
}
}
return res;
}
};
代码2:
class Solution {
public:
vector<string> restoreIpAddresses(string s) {
vector<string> res;
int len = s.length();
for(int i = 1; i <=3; ++i)
{
for(int j = 1; j <=3; ++j)
{
for(int k = 1; k <=3; ++k)
{
for(int l = 1; l <= 3; ++l)
{
if(i + j + k + l == len){
int a = stoi(s.substr(0,i));
int b = stoi(s.substr(i,j));
int c = stoi(s.substr(i+j,k));
int d = stoi(s.substr(i+j+k,l));
if(a <= 255 && b <= 255 && c <= 255 && d <= 255)
{
string temp = to_string(a) + "." + to_string(b) + "." + to_string(c) + "." + to_string(d);
if(temp.length() == (len + 3))//防止开始是0,接着也是0的情况,这样转换成整数时,转换成一个数了
res.push_back(temp);
}
}
}
}
}
}
return res;
}
};