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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy