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)
枚举每个小数点的位置,然后依次检查每个字符串是否合法。
注意每段字符串不能出现前导0,并且数字小于等于255
class Solution {
public:
vector<string> restoreIpAddresses(string s) {
vector<string> vec;
if( s.size() > 12 ) return vec;
for( int i = 0; i < s.size(); i++ ) {
for( int j = i + 1; j < s.size(); j++ ) {
for( int k = j + 1; k < s.size() - 1; k++ ) {
string ip1 = s.substr( 0, i + 1 );
string ip2 = s.substr( i + 1, j - i );
string ip3 = s.substr( j + 1, k - j );
string ip4 = s.substr( k + 1 );
if( check( ip1 ) && check( ip2 ) && check( ip3 ) && check( ip4 ) ) {
string ip = ip1 + "." + ip2 + "." + ip3 + "." + ip4;
vec.push_back( ip );
}
}
}
}
return vec;
}
bool check( string ip ) {
int value = stoi( ip );
if( ip[0] == '0') {
return ( ip.size() == 1 );
}
else {
if( value <= 255 )
return true;
else
return false;
}
}
};