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)
import java.util.ArrayList;
public class Solution {
private void restoreIpAddresses(String s, ArrayList<String> result, ArrayList<String> ip, int start) {
if (start == s.length() && ip.size() == 4) {
result.add(ip.get(0) + "." + ip.get(1) + "." + ip.get(2) + "." + ip.get(3));
return;
}
if (s.length() - start > 3 * (4 - ip.size())) return;
if (s.length() - start < 4 - ip.size()) return;
int num = 0;
for (int i = start; i < start + 3 && i < s.length(); i++) {
num = num * 10 + (s.charAt(i) - '0');
if (num > 255) {
break;
}
if (i > start && s.charAt(start) == '0') break;
ip.add(s.substring(start, i + 1));
restoreIpAddresses(s, result, ip, i + 1);
ip.remove(ip.size() - 1);
}
}
public ArrayList<String> restoreIpAddresses(String s) {
ArrayList<String> result = new ArrayList<>();
ArrayList<String> ip = new ArrayList<>();
if (s == null) return result;
restoreIpAddresses(s, result, ip, 0);
return result;
}
}