1 public class Solution {
2 public static ArrayList<String> restoreIpAddresses(String s) {
3 // Start typing your Java solution below
4 // DO NOT write main() function
5 ArrayList<String> result = new ArrayList<String>();
6 if (s == null || s.length() == 0) {
7 return result;
8 }
9 int depth = 0, start = 0;
10 String ip = "";
11 generate(s, start, depth, result, ip);
12
13 return result;
14 }
15
16 private static void generate(String s, int start, int depth,
17 ArrayList<String> result, String ip) {
18 // max = 3 check it
19 if ((s.length() - start) > (4 - depth) * 3) {
20 return;
21 }
22 // min = 1 check it
23 if (s.length() - start < 4 - depth) {
24 return;
25 }
26 if (depth == 4) {
27 ip = ip.substring(0, ip.length() - 1);
28 if(!result.contains(ip))
29 result.add(ip);
30 return;
31 }
32
33 int num = 0;
34 for (int i = start; i < Math.min(start + 3, s.length()); i++) {
35 num = num * 10 + (s.charAt(i) - '0');
36 if (num <= 255) {
37 generate(s, i + 1, depth + 1, result, ip + num + ".");
38 }
39 if(num == 0){
40 break;
41 }
42 }
43 }
44 }