Skip to content

Commit 4aa0df4

Browse files
solves restores ip addresses in java
1 parent 3d36e45 commit 4aa0df4

File tree

2 files changed

+58
-1
lines changed

2 files changed

+58
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@
8383
| 90 | [Subsets II](https://leetcode.com/problems/subsets-ii) | [![Java](assets/java.png)](src/SubsetsII.java) | |
8484
| 91 | [Decode Ways](https://leetcode.com/problems/decode-ways) | [![Java](assets/java.png)](src/DecodeWays.java) | |
8585
| 92 | [Reverse Linked List II](https://leetcode.com/problems/reverse-linked-list-ii) | [![Java](assets/java.png)](src/ReverseLinkedListII.java) | |
86-
| 93 | [Restore IP Addresses](https://leetcode.com/problems/restore-ip-addresses) | | |
86+
| 93 | [Restore IP Addresses](https://leetcode.com/problems/restore-ip-addresses) | [![Java](assets/java.png)](src/RestoreIPAddresses.java) | |
8787
| 94 | [Binary Tree Inorder Traversal](https://leetcode.com/problems/binary-tree-inorder-traversal/) | [![Java](assets/java.png)](src/BinaryTreeInorderTraversal.java) [![Python](assets/python.png)](python/binary_tree_inorder_traversal.py) | |
8888
| 95 | [Unique Binary Search Trees II](https://leetcode.com/problems/unique-binary-search-trees-ii) | | |
8989
| 96 | [Unique Binary Search Trees](https://leetcode.com/problems/unique-binary-search-trees) | | |

src/RestoreIPAddresses.java

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import java.util.ArrayList;
2+
import java.util.LinkedList;
3+
import java.util.List;
4+
5+
public class RestoreIPAddresses {
6+
public List<String> restoreIpAddresses(final String s) {
7+
final List<String> result = new ArrayList<>();
8+
restoreIpAddresses(s, result, new LinkedList<>(), 0);
9+
return result;
10+
}
11+
12+
private void restoreIpAddresses(final String s, final List<String> result, LinkedList<Integer> numbers, int index) {
13+
if (numbers.size() == 4 && index == s.length()) {
14+
result.add(ipAddressFrom(numbers));
15+
return;
16+
}
17+
if (numbers.size() >= 4 || index == s.length()) {
18+
return;
19+
}
20+
for (int i = index + 1 ; i <= s.length() ; i++) {
21+
if (isValidIpAddressInteger(s, index, i)) {
22+
numbers.add(toNumber(s, index, i));
23+
restoreIpAddresses(s, result, numbers, i);
24+
numbers.removeLast();
25+
} else {
26+
break;
27+
}
28+
}
29+
}
30+
31+
private String ipAddressFrom(LinkedList<Integer> numbers) {
32+
StringBuilder result = new StringBuilder();
33+
for (int number : numbers) {
34+
result.append(number).append('.');
35+
}
36+
result.deleteCharAt(result.length() - 1);
37+
return result.toString();
38+
}
39+
40+
private boolean isValidIpAddressInteger(String s, int start, int end) {
41+
if (hasLeadingZeros(s, start, end)) return false;
42+
return toNumber(s, start, end) < 256;
43+
}
44+
45+
private boolean hasLeadingZeros(String s, int start, int end) {
46+
return end - start > 1 && s.charAt(start) == '0';
47+
}
48+
49+
private int toNumber(String s, int start, int end) {
50+
int val = 0;
51+
for (int index = start ; index < end ; index++) {
52+
val *= 10;
53+
val += s.charAt(index) - '0';
54+
}
55+
return val;
56+
}
57+
}

0 commit comments

Comments
 (0)