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)
分析: DFS
class Solution {
private:
vector<string> ret;
public:
bool check(string &s, int beg, int end)
{
string ip = s.substr(beg, end - beg + 1);
if (ip.size() == 1)
return "0" <= ip && ip <= "9";
else if (ip.size() == 2)
return "10" <= ip && ip <= "99";
else if (ip.size() == 3)
return "100" <= ip && ip <= "255";
else
return false;
}
void dfs(string &s, int start, int level, vector<string> &item)
{
if(level == 4) {
if(start == s.size()) {
string s;
for(int i = 0; i < 4; i++) {
s += item[i];
if(i != 3) s += ".";
}
ret.push_back(s);
}
return ;
}
for(int i = start; i < s.size(); i++) {
if(check(s, start, i)) {
item.push_back(s.substr(start, i - start + 1));
dfs(s, i + 1, level + 1,item);
item.pop_back();
}
}
}
vector<string> restoreIpAddresses(string s) {
vector<string> item;
dfs(s, 0, 0, item);
return ret;
}
};