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)
class Solution {
public:
bool isIP(string str)
{
//若数字位数大于1,首位不能为0
if (str.length()>1 && str[0] == '0')
{
return false;
}
int temp = stoi(str);
return (temp >= 0) && (temp <= 255);
}
void DFS(vector<string>& result,string& s, string& temp, int count, int pos, int length)
{
if (count == 4 && pos == length)
{
//删除最后一个'.'
temp = temp.erase(length+3,1);
result.push_back(temp);
return;
}
for (int i=1;i<=3 && pos+i<=length;++i)
{
string num = s.substr(pos, i);
if (isIP(num))
{
string temp1= temp;
temp += num;
temp += '.';
DFS(result, s, temp, count + 1, pos + i, length);
//回溯还原
temp = temp1;
}
}
}
vector<string> restoreIpAddresses(string s) {
int len = s.length();
vector<string> res;
if (len < 4 || len>12)
return res;
string itemp;
DFS(res,s, itemp, 0, 0, len);
return res;
}
};