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”]
C++
vector<string> restoreIpAddresses(string s) {
vector<string> res;
string item = "";
DFS(s,item,4,res);
return res;
}
void DFS(string s,string item,int k,vector<string>& res)
{
if(k == 0)
{
if(s.empty())res.push_back(item);
}else{
for(int i = 1;i <= 3;++i)
{
if(s.size() >= i&&IsValid(s.substr(0,i)))
{
if(k == 1)
DFS(s.substr(i),item + s.substr(0,i),k-1,res);
else
DFS(s.substr(i),item + s.substr(0,i) + ".",k-1,res);
}
}
}
}
bool IsValid(string s)
{
if(s.empty()||s.size() > 3||(s.size() > 1&&s[0] == '0'))return false;
int res = atoi(s.c_str());
return res <= 255&&res >= 0;
}