Skip to content

Commit 433a8ff

Browse files
committed
Restore IP Address, iterate solution
1 parent 2c7cf2e commit 433a8ff

File tree

1 file changed

+42
-2
lines changed

1 file changed

+42
-2
lines changed

code/LeetCode/src/backtracking/RestoreIPAddress.java

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ public class RestoreIPAddress {
1010
public static void main(String[] args) {
1111
RestoreIPAddress obj = new RestoreIPAddress();
1212
String s = "25525511135";
13-
List<String> resultList = obj.restoreIpAddresses(s);
13+
//List<String> resultList = obj.restoreIpAddresses(s);
14+
List<String> resultList = obj.restoreIpAddressesWithIterate(s);
1415
System.out.println(Arrays.toString(resultList.toArray()));
1516
}
1617

@@ -32,7 +33,7 @@ private void dfs(List<String> resultList, String s, int start, String stored, in
3233
resultList.add(stored);
3334
}
3435

35-
if (start == s.length() || count == 4) {
36+
if (start >= s.length() || count == 4) {
3637
return;
3738
}
3839

@@ -47,4 +48,43 @@ private void dfs(List<String> resultList, String s, int start, String stored, in
4748
dfs(resultList, s, start + i, stored + part + (count == 3 ? "" : "."), count + 1);
4849
}
4950
}
51+
52+
53+
public List<String> restoreIpAddressesWithIterate(String s) {
54+
List<String> resultList = new ArrayList<String>();
55+
if (s == null || s.length() < 4) {
56+
return resultList;
57+
}
58+
59+
int len = s.length();
60+
String splitS = ".";
61+
// iterate
62+
for (int fisrt = 1; fisrt < 4 && fisrt < len - 2; fisrt++) {
63+
for (int second = fisrt + 1; second < fisrt + 4 && second < len - 1; second++) {
64+
for (int third = second + 1; third < second + 4 && third < len; third++) {
65+
String part1 = s.substring(0, fisrt);
66+
String part2 = s.substring(fisrt, second);
67+
String part3 = s.substring(second, third);
68+
String part4 = s.substring(third);
69+
if (valideIP(part1) && valideIP(part2) && valideIP(part3) && valideIP(part4)) {
70+
String result = part1 + splitS + part2 + splitS + part3 + splitS + part4;
71+
resultList.add(result);
72+
}
73+
}
74+
}
75+
76+
}
77+
78+
return resultList;
79+
}
80+
81+
private Boolean valideIP(String part) {
82+
if (part.length() == 0 || part.length() > 3
83+
|| (part.startsWith("0") && part.length() != 1)
84+
|| (part.length() == 3 && Integer.valueOf(part) > 255 )) {
85+
return false;
86+
}
87+
88+
return true;
89+
}
5090
}

0 commit comments

Comments
 (0)