Skip to content

Commit 6e27f09

Browse files
committed
新增1题,累积19题
1 parent 3974bbd commit 6e27f09

File tree

2 files changed

+95
-2
lines changed

2 files changed

+95
-2
lines changed

src/com/cjl/leetcode/Question_56.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44

55
/*
66
56. 合并区间
7-
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。
8-
请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
7+
问题描述:
8+
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。
9+
请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
910
示例 1:
1011
输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
1112
输出:[[1,6],[8,10],[15,18]]
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package com.cjl.leetcode;
2+
3+
import java.util.ArrayList;
4+
import java.util.Arrays;
5+
import java.util.Comparator;
6+
import java.util.List;
7+
8+
/*
9+
93. 复原 IP 地址
10+
问题描述:
11+
给定一个只包含数字的字符串,用以表示一个 IP 地址,返回所有可能从 s 获得的 有效 IP 地址 。你可以按任何顺序返回答案。
12+
有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。
13+
例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "[email protected]" 是 无效 IP 地址。
14+
示例 1:
15+
输入:s = "25525511135"
16+
输出:["255.255.11.135","255.255.111.35"]
17+
示例 2:
18+
输入:s = "0000"
19+
输出:["0.0.0.0"]
20+
示例 3:
21+
输入:s = "1111"
22+
输出:["1.1.1.1"]
23+
示例 4:
24+
输入:s = "010010"
25+
输出:["0.10.0.10","0.100.1.0"]
26+
示例 5:
27+
输入:s = "101023"
28+
输出:["1.0.10.23","1.0.102.3","10.1.0.23","10.10.2.3","101.0.2.3"]
29+
提示:
30+
0 <= s.length <= 3000
31+
s 仅由数字组成
32+
*/
33+
public class Question_93 {
34+
35+
List<String> res = new ArrayList<>();
36+
StringBuilder sb = new StringBuilder();
37+
38+
public List<String> solution1(String s) {
39+
if(s.length() > 12) {
40+
return res;
41+
}
42+
sb.append(s);
43+
backTrack(sb,0,0);
44+
return res;
45+
}
46+
47+
private void backTrack(StringBuilder sb, int start, int pointNum) {
48+
// 逗号数量为3时,分隔结束
49+
if(pointNum == 3) {
50+
if(isValid(sb.substring(start,sb.length()))) {
51+
res.add(sb.toString());
52+
}
53+
return;
54+
}
55+
for (int i = start; i < sb.length(); i++) {
56+
if(isValid(sb.substring(start,i + 1))) {
57+
// 在str的后⾯插⼊⼀个逗点
58+
sb.insert(i+1,'.');
59+
// 插入逗号后,下一个子串的起始位置是i+2
60+
backTrack(sb, i + 2, pointNum + 1);
61+
// 回溯删去逗号
62+
sb.deleteCharAt(i + 1);
63+
}else {
64+
break;
65+
}
66+
}
67+
}
68+
69+
// 判断字符串s在左闭右闭区间[start, end]所组成的数字是否合法
70+
private Boolean isValid(String str) {
71+
if(str == null || str.length() == 0) {
72+
return false;
73+
}
74+
// 以0为开头的数字不合法
75+
if(str.charAt(0) == '0' && str.length() > 1) {
76+
return false;
77+
}
78+
int num = 0;
79+
for (int i = 0; i < str.length(); i++) {
80+
// 遇到非数字字符则不合法
81+
if(str.charAt(i) > '9' || str.charAt(i) < '0') {
82+
return false;
83+
}
84+
num = num * 10 + (str.charAt(i) - '0');
85+
// 大于255则不合法
86+
if(num > 255) {
87+
return false;
88+
}
89+
}
90+
return true;
91+
}
92+
}

0 commit comments

Comments
 (0)