Skip to content

Commit 3b0b9c7

Browse files
committed
Add Leetcode: Restore IP Addresses
1 parent 5c3b08c commit 3b0b9c7

File tree

3 files changed

+102
-1
lines changed

3 files changed

+102
-1
lines changed

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,12 +181,14 @@ HackerRank assigns their problems a difficulty rating (Easy, Medium, Hard, Exper
181181

182182
- Employee Names (Easy) [Problem](https://www.hackerrank.com/challenges/name-of-employees/problem) | [Solution](https://github.com/aykrieger/coding-exercises/blob/master/sql/employee-names.sql)
183183

184-
## LeetCode (2 Problems)
184+
## LeetCode (3 Problems)
185185

186186
- K-diff Pairs in an Array (Medium) [Problem](https://leetcode.com/problems/k-diff-pairs-in-an-array/) | [Solution](https://github.com/aykrieger/coding-exercises/blob/master/src/main/java/leetcode/KDiffPairsInAnArray.java)
187187

188188
- Longest Substring Without Repeating Characters (Medium) [Problem](https://leetcode.com/problems/longest-substring-without-repeating-characters/) | [Solution](https://github.com/aykrieger/coding-exercises/blob/master/src/main/java/leetcode/LongestSubstringWithoutRepeatingCharacters.java)
189189

190+
- Restore IP Addresses (Medium) [Problem](https://leetcode.com/problems/restore-ip-addresses/) | [Solution](https://github.com/aykrieger/coding-exercises/blob/master/src/main/java/leetcode/RestoreIPAddresses.java)
191+
190192
## aykrieger (1 Problem)
191193

192194
- First Non-Duplicate [Solution](https://github.com/aykrieger/coding-exercises/blob/master/src/main/java/aykrieger/FirstNonDuplicate.java)
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package leetcode;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
/**
7+
* @see <a href="https://leetcode.com/problems/restore-ip-addresses/">Restore IP Addresses</a>
8+
*/
9+
public class RestoreIPAddresses {
10+
11+
public static List<String> restoreIpAddresses(String input) {
12+
13+
if (input.length() < 4 || input.length() > 12) {
14+
return new ArrayList<>();
15+
}
16+
List<String> results = new ArrayList<>();
17+
List<String> octets = new ArrayList<>();
18+
validIPsHelper(results, octets, input, 0, 4);
19+
return results;
20+
}
21+
22+
private static void validIPsHelper(List<String> results, List<String> octets, String input,
23+
int index,
24+
int octetsToAdd) {
25+
if (octetsToAdd < 1) {
26+
if (index == input.length()) {
27+
results.add(String.join(".", octets));
28+
}
29+
return;
30+
}
31+
32+
int curr = index;
33+
int maxIndex = curr + 3;
34+
while (curr < input.length() && curr < maxIndex) {
35+
String subString = input.substring(index, curr + 1);
36+
int num = Integer.parseInt(subString);
37+
if (subString.equals(Integer.toString(num)) && isValidOctet(num)) {
38+
octets.add(subString);
39+
validIPsHelper(results, octets, input, curr + 1, octetsToAdd - 1);
40+
octets.remove(octets.size() - 1);
41+
} else {
42+
break;
43+
}
44+
curr++;
45+
}
46+
}
47+
48+
private static boolean isValidOctet(int num) {
49+
return num >= 0 && num <= 255;
50+
}
51+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package leetcode;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
5+
import java.util.Arrays;
6+
import java.util.Collections;
7+
import java.util.List;
8+
import org.junit.jupiter.api.Test;
9+
10+
public class RestoreIPAddressesTest {
11+
12+
@Test
13+
public void testRestoreIpAddresses1() {
14+
List<String> expected = Arrays.asList("255.255.11.135", "255.255.111.35");
15+
List<String> result = RestoreIPAddresses.restoreIpAddresses("25525511135");
16+
Collections.sort(expected);
17+
Collections.sort(result);
18+
assertEquals(expected, result);
19+
}
20+
21+
@Test
22+
public void testRestoreIpAddresses2() {
23+
List<String> expected = Arrays.asList("0.0.0.0");
24+
List<String> result = RestoreIPAddresses.restoreIpAddresses("0000");
25+
assertEquals(expected, result);
26+
}
27+
28+
@Test
29+
public void testRestoreIpAddresses3() {
30+
List<String> expected = Arrays.asList("1.0.10.23", "1.0.102.3", "10.1.0.23", "10.10.2.3",
31+
"101.0.2.3");
32+
List<String> result = RestoreIPAddresses.restoreIpAddresses("101023");
33+
Collections.sort(expected);
34+
Collections.sort(result);
35+
assertEquals(expected, result);
36+
}
37+
38+
@Test
39+
public void testRestoreIpAddresses4() {
40+
List<String> expected = Arrays.asList("1.92.168.11", "19.2.168.11", "19.21.68.11",
41+
"19.216.8.11", "19.216.81.1", "192.1.68.11", "192.16.8.11", "192.16.81.1", "192.168.1.1");
42+
43+
List<String> result = RestoreIPAddresses.restoreIpAddresses("19216811");
44+
Collections.sort(expected);
45+
Collections.sort(result);
46+
assertEquals(expected, result);
47+
}
48+
}

0 commit comments

Comments
 (0)