一、问题描述
Given a string containing only digits, restore it by returning all possible valid IP address combinations.
For example:
Given "25525511135"
,
return ["255.255.11.135", "255.255.111.35"]
. (Order does not matter)
二、思路
利用C++11中的两个函数stoi和to_string,主要完成字符串和数字的转化,注意我们的循环体执行条件:
if (i + j + k + l == s.size())
必须在满足我们的长度之和时才能执行循环体,其次:
if(a <= 255 && b <= 255 && c <= 255 && d <= 255)
每个分块地址的大小都必须严格小于255.以及
if(str.size() == (s.size() + 3))
当我们的总长度加上三个分隔符长度必须等于原始长度加3.
三、代码
class Solution {
public:
vector<string> restoreIpAddresses(string s) {
vector<string> vec;
string str;
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 == s.size()){
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){
str = to_string(a) + "." + to_string(b) + "." + to_string(c) + "." + to_string(d);
if(str.size() == (s.size() + 3)){
vec.push_back(str);
}
}
}
}
}
}
}
return vec;
}
};