Skip to content

Commit ef92157

Browse files
committed
0093. Restore IP Addresses
1 parent bb1edba commit ef92157

File tree

5 files changed

+169
-0
lines changed

5 files changed

+169
-0
lines changed

docs/_sidebar.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,5 @@
6666
* [0090. Subsets II](markdown/0090.%20Subsets%20II)
6767
* [0091. Decode Ways](markdown/0091.%20Decode%20Ways)
6868
* [0092. Reverse Linked List II](markdown/0092.%20Reverse%20Linked%20List%20II)
69+
* [0093. Restore IP Addresses](markdown/0093.%20Restore%20IP%20Addresses)
6970
* [0146. LRU Cache](markdown/0146.%20LRU%20Cache)
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
### [93\. Restore IP Addresses](https://leetcode.com/problems/restore-ip-addresses/)
2+
3+
Difficulty: **Medium**
4+
5+
6+
Given a string containing only digits, restore it by returning all possible valid IP address combinations.
7+
8+
**Example:**
9+
10+
```
11+
Input: "25525511135"
12+
Output: ["255.255.11.135", "255.255.111.35"]
13+
```
14+
15+
16+
#### Solution
17+
18+
Language: **Java**
19+
20+
```java
21+
class Solution {
22+
   public List<String> restoreIpAddresses(String s) {
23+
       List<String> result = new ArrayList<>();
24+
       doRestore(result, "", s, 0);
25+
       return result;
26+
  }
27+
28+
   /**
29+
    * DFS 反解析 IP 地址
30+
    *
31+
    * @param result 解析结果
32+
    * @param path   已经走完的路径:譬如:192.169
33+
    * @param s     剩下的需要解析的字符串
34+
    * @param level DFS 的第几层
35+
    */
36+
   private void doRestore(List<String> result, String path, String s, int level) {
37+
       if ((4 - level) * 3 < s.length()) {
38+
           return;
39+
      }
40+
       // 如果大于三层,说明已经完成了
41+
       if (s.isEmpty()) {
42+
           if (level == 4) {
43+
               // 因为 path 最前面有一个 "." 需要去除
44+
               result.add(path.substring(1));
45+
          }
46+
           return;
47+
      }
48+
       // 开始的那个字母
49+
       String startNum = s.substring(0, 1);
50+
       for (int i = 0; i < (startNum.equals("0") ? 1 : (Math.min(s.length(), 3))); i++) {
51+
           if (Integer.parseInt(s.substring(0, i + 1)) <= 255) {
52+
               doRestore(result, path + "." + s.substring(0, i + 1), s.substring(i + 1), level + 1);
53+
          }
54+
      }
55+
  }
56+
}
57+
```

src/main/java/leetcode/_93_/Main.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package leetcode._93_;
2+
3+
/**
4+
* Created by zhangbo54 on 2019-03-04.
5+
*/
6+
public class Main {
7+
public static void main(String[] args) {
8+
Solution solution = new Solution();
9+
System.out.println( solution.restoreIpAddresses("25525511135"));
10+
System.out.println( solution.restoreIpAddresses("1111"));
11+
}
12+
}
13+
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package leetcode._93_;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
class Solution {
7+
public List<String> restoreIpAddresses(String s) {
8+
List<String> result = new ArrayList<>();
9+
doRestore(result, "", s, 0);
10+
return result;
11+
}
12+
13+
/**
14+
* DFS 反解析 IP 地址
15+
*
16+
* @param result 解析结果
17+
* @param path 已经走完的路径:譬如:192.169
18+
* @param s 剩下的需要解析的字符串
19+
* @param level DFS 的第几层
20+
*/
21+
private void doRestore(List<String> result, String path, String s, int level) {
22+
if ((4 - level) * 3 < s.length()) {
23+
return;
24+
}
25+
// 如果大于三层,说明已经完成了
26+
if (s.isEmpty()) {
27+
if (level == 4) {
28+
// 因为 path 最前面有一个 "." 需要去除
29+
result.add(path.substring(1));
30+
}
31+
return;
32+
}
33+
// 开始的那个字母
34+
String startNum = s.substring(0, 1);
35+
for (int i = 0; i < (startNum.equals("0") ? 1 : (Math.min(s.length(), 3))); i++) {
36+
if (Integer.parseInt(s.substring(0, i + 1)) <= 255) {
37+
doRestore(result, path + "." + s.substring(0, i + 1), s.substring(i + 1), level + 1);
38+
}
39+
}
40+
}
41+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
### [93\. Restore IP Addresses](https://leetcode.com/problems/restore-ip-addresses/)
2+
3+
Difficulty: **Medium**
4+
5+
6+
Given a string containing only digits, restore it by returning all possible valid IP address combinations.
7+
8+
**Example:**
9+
10+
```
11+
Input: "25525511135"
12+
Output: ["255.255.11.135", "255.255.111.35"]
13+
```
14+
15+
16+
#### Solution
17+
18+
Language: **Java**
19+
20+
```java
21+
class Solution {
22+
   public List<String> restoreIpAddresses(String s) {
23+
       List<String> result = new ArrayList<>();
24+
       doRestore(result, "", s, 0);
25+
       return result;
26+
  }
27+
28+
   /**
29+
    * DFS 反解析 IP 地址
30+
    *
31+
    * @param result 解析结果
32+
    * @param path   已经走完的路径:譬如:192.169
33+
    * @param s     剩下的需要解析的字符串
34+
    * @param level DFS 的第几层
35+
    */
36+
   private void doRestore(List<String> result, String path, String s, int level) {
37+
       if ((4 - level) * 3 < s.length()) {
38+
           return;
39+
      }
40+
       // 如果大于三层,说明已经完成了
41+
       if (s.isEmpty()) {
42+
           if (level == 4) {
43+
               // 因为 path 最前面有一个 "." 需要去除
44+
               result.add(path.substring(1));
45+
          }
46+
           return;
47+
      }
48+
       // 开始的那个字母
49+
       String startNum = s.substring(0, 1);
50+
       for (int i = 0; i < (startNum.equals("0") ? 1 : (Math.min(s.length(), 3))); i++) {
51+
           if (Integer.parseInt(s.substring(0, i + 1)) <= 255) {
52+
               doRestore(result, path + "." + s.substring(0, i + 1), s.substring(i + 1), level + 1);
53+
          }
54+
      }
55+
  }
56+
}
57+
```

0 commit comments

Comments
 (0)