Problem:
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)
Analysis:
Solutions:
C++:
void GenerateIPs(string str, string ip_temp, vector<string>& vIPs, int num_parts)
{
if(num_parts == 3) {
if(str.size() > 3
|| (str.size() == 3 && stoi(str) > 255)
|| (str[0] == '0' && str.size() > 1))
return;
vIPs.push_back(ip_temp + str);
} else {
for(int i = 1; i < str.size() && i <= 3; ++i) {
if((str[0] == '0' && i > 1)
|| (i == 3 && stoi(str.substr(0, 3)) > 255))
break;
GenerateIPs(str.substr(i), ip_temp + str.substr(0, i) + ".", vIPs, num_parts + 1);
}
}
}
vector<string> restoreIpAddresses(string s) {
vector<string> vIPs;
int size = s.size();
if(size == 0 || size < 4 || size > 12 || (size == 12 && s[0] >= '3'))
return vIPs;
string ip_temp;
GenerateIPs(s, ip_temp, vIPs, 0);
return vIPs;
}
Java:
Python: