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是指四地址,格式为x.x.x.x,其中x>=0 && x <= 255。所以这题也是一道很典型的深搜题,要考虑每一种情况,其中又有着一些约束条件,可以做一些剪枝来减少一些时间,其中代码如下。
Code(LeetCode运行0ms):
class Solution {
public:
vector<string> restoreIpAddresses(string s) {
vector<string> result;
vector<string> ip;
dfs(s, ip, result, 0);
return result;
}
void dfs(string& s, vector<string>& ip, vector<string>& result, int start) {
if (ip.size() == 4 && start == s.size()) {
result.push_back(ip[0] + '.' + ip[1] + '.' + ip[2] + '.' + ip[3]);
return;
}
if (s.size() - start > (4 - ip.size()) * 3 || s.size() - start < (4 - ip.size())) {
return;
}
int num = 0;
for (int i = start; i < start + 3; i++) {
num = num * 10 + (s[i] - '0');
if (num < 0 || num > 255) {
continue;
}
ip.push_back(s.substr(start, i - start + 1));
dfs(s, ip, result, i + 1);
ip.pop_back();
if (num == 0) {
break;
}
}
}
};