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)
Runtime: 2
ms beats 96.45% of javasubmissions.
public List<String> restoreIpAddresses(String s) {
List<String> res = new ArrayList<>();
dfs(s, 0, "", res);
return res;
}
private void dfs(String s, int d, String path, List<String> res) {
if (d == 4) res.add(path.substring(0, path.length() - 1));
else {
for (int i = 1; i <= 3; i++) {
if (s.length() - i < 3 - d || s.length() - i > (3 - d) * 3) continue;
if (i > 1 && s.charAt(0) == '0') break;
if (i == 3 && s.substring(0, 3).compareTo("255") > 0) break;
dfs(s.substring(i), d + 1, path + s.substring(0, i) + '.', res);
}
}
}