Skip to content

Commit bfeb5b5

Browse files
committed
feat: add solutions to lc porblem: No.0163
No.0163.Missing Ranges
1 parent 22c2071 commit bfeb5b5

File tree

7 files changed

+319
-7
lines changed

7 files changed

+319
-7
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
class Solution:
22
def romanToInt(self, s: str) -> int:
3-
romans = {'I': 1, 'V': 5, 'X': 10,
4-
'L': 50, 'C': 100, 'D': 500, 'M': 1000}
3+
romans = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
54
ans = 0
6-
for i in range(len(s)-1):
7-
if romans[s[i]] < romans[s[i+1]]:
5+
for i in range(len(s) - 1):
6+
if romans[s[i]] < romans[s[i + 1]]:
87
ans -= romans[s[i]]
98
else:
109
ans += romans[s[i]]
11-
return ans+romans[s[-1]]
10+
return ans + romans[s[-1]]

solution/0100-0199/0163.Missing Ranges/README.md

+112-1
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,133 @@
1818

1919
<!-- 这里可写通用的实现逻辑 -->
2020

21+
**方法一:模拟**
22+
23+
按照题意模拟即可。
24+
25+
时间复杂度 $O(n)$,忽略答案的空间消耗,空间复杂度 $O(1)$。其中 $n$ 为数组 `nums` 的长度。
26+
2127
<!-- tabs:start -->
2228

2329
### **Python3**
2430

2531
<!-- 这里可写当前语言的特殊实现逻辑 -->
2632

2733
```python
28-
34+
class Solution:
35+
def findMissingRanges(self, nums: List[int], lower: int, upper: int) -> List[str]:
36+
def f(a, b):
37+
return str(a) if a == b else f'{a}->{b}'
38+
39+
n = len(nums)
40+
if n == 0:
41+
return [f(lower, upper)]
42+
ans = []
43+
if nums[0] > lower:
44+
ans.append(f(lower, nums[0] - 1))
45+
for a, b in pairwise(nums):
46+
if b - a > 1:
47+
ans.append(f(a + 1, b - 1))
48+
if nums[-1] < upper:
49+
ans.append(f(nums[-1] + 1, upper))
50+
return ans
2951
```
3052

3153
### **Java**
3254

3355
<!-- 这里可写当前语言的特殊实现逻辑 -->
3456

3557
```java
58+
class Solution {
59+
public List<String> findMissingRanges(int[] nums, int lower, int upper) {
60+
int n = nums.length;
61+
List<String> ans = new ArrayList<>();
62+
if (n == 0) {
63+
ans.add(f(lower, upper));
64+
return ans;
65+
}
66+
if (nums[0] > lower) {
67+
ans.add(f(lower, nums[0] - 1));
68+
}
69+
for (int i = 1; i < n; ++i) {
70+
int a = nums[i - 1], b = nums[i];
71+
if (b - a > 1) {
72+
ans.add(f(a + 1, b - 1));
73+
}
74+
}
75+
if (nums[n - 1] < upper) {
76+
ans.add(f(nums[n - 1] + 1, upper));
77+
}
78+
return ans;
79+
}
80+
81+
private String f(int a, int b) {
82+
return a == b ? a + "" : a + "->" + b;
83+
}
84+
}
85+
```
86+
87+
### **C++**
88+
89+
```cpp
90+
class Solution {
91+
public:
92+
vector<string> findMissingRanges(vector<int>& nums, int lower, int upper) {
93+
auto f = [](int a, int b) {
94+
return a == b ? to_string(a) : to_string(a) + "->" + to_string(b);
95+
};
96+
int n = nums.size();
97+
vector<string> ans;
98+
if (n == 0) {
99+
ans.emplace_back(f(lower, upper));
100+
return ans;
101+
}
102+
if (nums[0] > lower) {
103+
ans.emplace_back(f(lower, nums[0] - 1));
104+
}
105+
for (int i = 1; i < n; ++i) {
106+
int a = nums[i - 1], b = nums[i];
107+
if (b - a > 1) {
108+
ans.emplace_back(f(a + 1, b - 1));
109+
}
110+
}
111+
if (nums[n - 1] < upper) {
112+
ans.emplace_back(f(nums[n - 1] + 1, upper));
113+
}
114+
return ans;
115+
}
116+
};
117+
```
36118
119+
### **Go**
120+
121+
```go
122+
func findMissingRanges(nums []int, lower int, upper int) (ans []string) {
123+
f := func(a, b int) string {
124+
if a == b {
125+
return strconv.Itoa(a)
126+
}
127+
return strconv.Itoa(a) + "->" + strconv.Itoa(b)
128+
}
129+
n := len(nums)
130+
if n == 0 {
131+
ans = append(ans, f(lower, upper))
132+
return
133+
}
134+
if nums[0] > lower {
135+
ans = append(ans, f(lower, nums[0]-1))
136+
}
137+
for i := 1; i < n; i++ {
138+
a, b := nums[i-1], nums[i]
139+
if b-a > 1 {
140+
ans = append(ans, f(a+1, b-1))
141+
}
142+
}
143+
if nums[n-1] < upper {
144+
ans = append(ans, f(nums[n-1]+1, upper))
145+
}
146+
return
147+
}
37148
```
38149

39150
### **...**

solution/0100-0199/0163.Missing Ranges/README_EN.md

+106-1
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,118 @@
5555
### **Python3**
5656

5757
```python
58-
58+
class Solution:
59+
def findMissingRanges(self, nums: List[int], lower: int, upper: int) -> List[str]:
60+
def f(a, b):
61+
return str(a) if a == b else f'{a}->{b}'
62+
63+
n = len(nums)
64+
if n == 0:
65+
return [f(lower, upper)]
66+
ans = []
67+
if nums[0] > lower:
68+
ans.append(f(lower, nums[0] - 1))
69+
for a, b in pairwise(nums):
70+
if b - a > 1:
71+
ans.append(f(a + 1, b - 1))
72+
if nums[-1] < upper:
73+
ans.append(f(nums[-1] + 1, upper))
74+
return ans
5975
```
6076

6177
### **Java**
6278

6379
```java
80+
class Solution {
81+
public List<String> findMissingRanges(int[] nums, int lower, int upper) {
82+
int n = nums.length;
83+
List<String> ans = new ArrayList<>();
84+
if (n == 0) {
85+
ans.add(f(lower, upper));
86+
return ans;
87+
}
88+
if (nums[0] > lower) {
89+
ans.add(f(lower, nums[0] - 1));
90+
}
91+
for (int i = 1; i < n; ++i) {
92+
int a = nums[i - 1], b = nums[i];
93+
if (b - a > 1) {
94+
ans.add(f(a + 1, b - 1));
95+
}
96+
}
97+
if (nums[n - 1] < upper) {
98+
ans.add(f(nums[n - 1] + 1, upper));
99+
}
100+
return ans;
101+
}
102+
103+
private String f(int a, int b) {
104+
return a == b ? a + "" : a + "->" + b;
105+
}
106+
}
107+
```
108+
109+
### **C++**
110+
111+
```cpp
112+
class Solution {
113+
public:
114+
vector<string> findMissingRanges(vector<int>& nums, int lower, int upper) {
115+
auto f = [](int a, int b) {
116+
return a == b ? to_string(a) : to_string(a) + "->" + to_string(b);
117+
};
118+
int n = nums.size();
119+
vector<string> ans;
120+
if (n == 0) {
121+
ans.emplace_back(f(lower, upper));
122+
return ans;
123+
}
124+
if (nums[0] > lower) {
125+
ans.emplace_back(f(lower, nums[0] - 1));
126+
}
127+
for (int i = 1; i < n; ++i) {
128+
int a = nums[i - 1], b = nums[i];
129+
if (b - a > 1) {
130+
ans.emplace_back(f(a + 1, b - 1));
131+
}
132+
}
133+
if (nums[n - 1] < upper) {
134+
ans.emplace_back(f(nums[n - 1] + 1, upper));
135+
}
136+
return ans;
137+
}
138+
};
139+
```
64140
141+
### **Go**
142+
143+
```go
144+
func findMissingRanges(nums []int, lower int, upper int) (ans []string) {
145+
f := func(a, b int) string {
146+
if a == b {
147+
return strconv.Itoa(a)
148+
}
149+
return strconv.Itoa(a) + "->" + strconv.Itoa(b)
150+
}
151+
n := len(nums)
152+
if n == 0 {
153+
ans = append(ans, f(lower, upper))
154+
return
155+
}
156+
if nums[0] > lower {
157+
ans = append(ans, f(lower, nums[0]-1))
158+
}
159+
for i := 1; i < n; i++ {
160+
a, b := nums[i-1], nums[i]
161+
if b-a > 1 {
162+
ans = append(ans, f(a+1, b-1))
163+
}
164+
}
165+
if nums[n-1] < upper {
166+
ans = append(ans, f(nums[n-1]+1, upper))
167+
}
168+
return
169+
}
65170
```
66171

67172
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
class Solution {
2+
public:
3+
vector<string> findMissingRanges(vector<int>& nums, int lower, int upper) {
4+
auto f = [](int a, int b) {
5+
return a == b ? to_string(a) : to_string(a) + "->" + to_string(b);
6+
};
7+
int n = nums.size();
8+
vector<string> ans;
9+
if (n == 0) {
10+
ans.emplace_back(f(lower, upper));
11+
return ans;
12+
}
13+
if (nums[0] > lower) {
14+
ans.emplace_back(f(lower, nums[0] - 1));
15+
}
16+
for (int i = 1; i < n; ++i) {
17+
int a = nums[i - 1], b = nums[i];
18+
if (b - a > 1) {
19+
ans.emplace_back(f(a + 1, b - 1));
20+
}
21+
}
22+
if (nums[n - 1] < upper) {
23+
ans.emplace_back(f(nums[n - 1] + 1, upper));
24+
}
25+
return ans;
26+
}
27+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
func findMissingRanges(nums []int, lower int, upper int) (ans []string) {
2+
f := func(a, b int) string {
3+
if a == b {
4+
return strconv.Itoa(a)
5+
}
6+
return strconv.Itoa(a) + "->" + strconv.Itoa(b)
7+
}
8+
n := len(nums)
9+
if n == 0 {
10+
ans = append(ans, f(lower, upper))
11+
return
12+
}
13+
if nums[0] > lower {
14+
ans = append(ans, f(lower, nums[0]-1))
15+
}
16+
for i := 1; i < n; i++ {
17+
a, b := nums[i-1], nums[i]
18+
if b-a > 1 {
19+
ans = append(ans, f(a+1, b-1))
20+
}
21+
}
22+
if nums[n-1] < upper {
23+
ans = append(ans, f(nums[n-1]+1, upper))
24+
}
25+
return
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
class Solution {
2+
public List<String> findMissingRanges(int[] nums, int lower, int upper) {
3+
int n = nums.length;
4+
List<String> ans = new ArrayList<>();
5+
if (n == 0) {
6+
ans.add(f(lower, upper));
7+
return ans;
8+
}
9+
if (nums[0] > lower) {
10+
ans.add(f(lower, nums[0] - 1));
11+
}
12+
for (int i = 1; i < n; ++i) {
13+
int a = nums[i - 1], b = nums[i];
14+
if (b - a > 1) {
15+
ans.add(f(a + 1, b - 1));
16+
}
17+
}
18+
if (nums[n - 1] < upper) {
19+
ans.add(f(nums[n - 1] + 1, upper));
20+
}
21+
return ans;
22+
}
23+
24+
private String f(int a, int b) {
25+
return a == b ? a + "" : a + "->" + b;
26+
}
27+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution:
2+
def findMissingRanges(self, nums: List[int], lower: int, upper: int) -> List[str]:
3+
def f(a, b):
4+
return str(a) if a == b else f'{a}->{b}'
5+
6+
n = len(nums)
7+
if n == 0:
8+
return [f(lower, upper)]
9+
ans = []
10+
if nums[0] > lower:
11+
ans.append(f(lower, nums[0] - 1))
12+
for a, b in pairwise(nums):
13+
if b - a > 1:
14+
ans.append(f(a + 1, b - 1))
15+
if nums[-1] < upper:
16+
ans.append(f(nums[-1] + 1, upper))
17+
return ans

0 commit comments

Comments
 (0)