Restore IP Addresses 原题地址:
https://oj.leetcode.com/problems/restore-ip-addresses/
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)
public class Solution {
private List<String> IP = new ArrayList<String>();
public List<String> restoreIpAddresses(String s) {
int max = Math.min(3, s.length() - 3);
int min = Math.max(1, s.length() - 9);
if (min > 3 || max < 1)
return IP;
for (int i = min; i <= max; i++) {
StringBuffer Temp = new StringBuffer();
String temp = s.substring(0, i);
if (temp.charAt(0) == '0' && i > 1)
break;
int ip = Integer.parseInt(temp);
if (ip < 256) {
Temp.append(s.substring(0, i));
findIP(Temp, 3, s.substring(i));
}
}
return IP;
}
private void findIP(StringBuffer Temp, int p, String s) {
int max = Math.min(3, s.length() - (p-1));
int min = Math.max(1, s.length() - 3 * (p - 1));
if (min > 3 || max < 1)
return;
if (p == 1) {
if (s.charAt(0) == '0' && s.length() > 1)
return;
int ip = Integer.parseInt(s);
if (ip < 256) {
Temp.append("."+s);
IP.add(Temp.toString());
}
return;
}
int start = Temp.length();
for (int i = min; i <= max; i++) {
String temp = s.substring(0, i);
if (temp.charAt(0) == '0' && temp.length() > 1)
return;
int ip = Integer.parseInt(temp);
if (ip < 256) {
Temp.append("." + s.substring(0, i));
findIP(Temp, p-1, s.substring(i));
Temp.delete(start, Temp.length());
}
}
}
}