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"]
class Solution {
public:
vector<string> restoreIpAddresses(string s)
{
vector<string> ret;
if(s.length() < 4 || s.length() > 12) return ret;
restoreIpAddresses_helper(s, "", ret, 1);
return ret;
}
void restoreIpAddresses_helper(string s, string tmp, vector<string>& ret, int segment)
{
if(segment == 4 && isValid(s))
{
ret.push_back(tmp + s);
}
for(int i = 1; i < 4 && (i < s.length()); i++)
{
string substr = s.substr(0, i);
if(isValid(substr))
{
int strlen = s.length();
restoreIpAddresses_helper(s.substr(i, strlen - i), tmp + substr + '.' , ret, segment + 1);
}
}
}
bool isValid(string str)
{
if(str.length() == 0 || str.length() > 3)
return false;
if(str[0] == '0' && str.length() > 1)
return false;
int num = stoi(str);
if(num >= 0 && num <= 255)
return true;
else
return false;
}
};