Description:
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)
分析:给一组数字将其转化为ip地址,这题如果用迭代需要设置多层循环,所以不妨采用递归。需要注意的是ip地址的4个数若首数字为0,则该数只能为0,若该数为三位数,则这个数必须小于256。
下面是代码:
class Solution {
public:
vector<string> restoreIpAddresses(string s) {
vector<string> ret;
string tmp;
dfs_restore(s, tmp, ret, 4);
return ret;
}
void dfs_restore(string s, string tmp, vector<string>& ret, int n)
{
if(n == 0 && s.size() == 0)
{
tmp.pop_back();
ret.push_back(tmp);
return;
}
if(s.size() > 3 * n || s.size() < n)
return;
dfs_restore(&s[0] + 1, tmp + s[0] + ".", ret, n - 1);
if(s.size() > 1 && s[0] != '0')
dfs_restore(&s[0] + 2, tmp + s.substr(0, 2) + ".", ret, n - 1);
if(s.size() > 2 && s[0] != '0' && atoi(s.substr(0, 3).c_str())< 256)
dfs_restore(&s[0] + 3, tmp + s.substr(0, 3) + ".", ret, n - 1);
}
};