Skip to content

Commit 66176ea

Browse files
Merge branch 'main' into main
2 parents 0496362 + 13ca332 commit 66176ea

File tree

156 files changed

+38447
-31232
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

156 files changed

+38447
-31232
lines changed

images/starcharts.svg

Lines changed: 30560 additions & 30460 deletions
Loading

solution/0000-0099/0002.Add Two Numbers/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,9 @@ class Solution {
147147
class Solution {
148148
public:
149149
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
150-
ListNode* dummy = new ListNode();
150+
ListNode dummy;
151151
int carry = 0;
152-
ListNode* cur = dummy;
152+
ListNode* cur = &dummy;
153153
while (l1 || l2 || carry) {
154154
int s = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + carry;
155155
carry = s / 10;
@@ -158,7 +158,7 @@ public:
158158
l1 = l1 ? l1->next : nullptr;
159159
l2 = l2 ? l2->next : nullptr;
160160
}
161-
return dummy->next;
161+
return dummy.next;
162162
}
163163
};
164164
```

solution/0000-0099/0002.Add Two Numbers/README_EN.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,9 @@ class Solution {
143143
class Solution {
144144
public:
145145
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
146-
ListNode* dummy = new ListNode();
146+
ListNode dummy;
147147
int carry = 0;
148-
ListNode* cur = dummy;
148+
ListNode* cur = &dummy;
149149
while (l1 || l2 || carry) {
150150
int s = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + carry;
151151
carry = s / 10;
@@ -154,7 +154,7 @@ public:
154154
l1 = l1 ? l1->next : nullptr;
155155
l2 = l2 ? l2->next : nullptr;
156156
}
157-
return dummy->next;
157+
return dummy.next;
158158
}
159159
};
160160
```

solution/0000-0099/0002.Add Two Numbers/Solution.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
class Solution {
1212
public:
1313
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
14-
ListNode* dummy = new ListNode();
14+
ListNode dummy;
1515
int carry = 0;
16-
ListNode* cur = dummy;
16+
ListNode* cur = &dummy;
1717
while (l1 || l2 || carry) {
1818
int s = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + carry;
1919
carry = s / 10;
@@ -22,6 +22,6 @@ class Solution {
2222
l1 = l1 ? l1->next : nullptr;
2323
l2 = l2 ? l2->next : nullptr;
2424
}
25-
return dummy->next;
25+
return dummy.next;
2626
}
2727
};

solution/0000-0099/0008.String to Integer (atoi)/README.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,36 @@ class Solution {
214214
}
215215
```
216216

217+
#### C++
218+
219+
```cpp
220+
class Solution {
221+
public:
222+
int myAtoi(string s) {
223+
int i = 0, n = s.size();
224+
while (i < n && s[i] == ' ')
225+
++i;
226+
227+
int sign = 1;
228+
if (i < n && (s[i] == '-' || s[i] == '+')) {
229+
sign = s[i] == '-' ? -1 : 1;
230+
++i;
231+
}
232+
233+
int res = 0;
234+
while (i < n && isdigit(s[i])) {
235+
int digit = s[i] - '0';
236+
if (res > INT_MAX / 10 || (res == INT_MAX / 10 && digit > INT_MAX % 10)) {
237+
return sign == 1 ? INT_MAX : INT_MIN;
238+
}
239+
res = res * 10 + digit;
240+
++i;
241+
}
242+
return res * sign;
243+
}
244+
};
245+
```
246+
217247
#### Go
218248

219249
```go

solution/0000-0099/0008.String to Integer (atoi)/README_EN.md

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -160,19 +160,16 @@ class Solution:
160160
i = 0
161161
while s[i] == ' ':
162162
i += 1
163-
# 仅包含空格
164163
if i == n:
165164
return 0
166165
sign = -1 if s[i] == '-' else 1
167166
if s[i] in ['-', '+']:
168167
i += 1
169168
res, flag = 0, (2**31 - 1) // 10
170169
while i < n:
171-
# 非数字,跳出循环体
172170
if not s[i].isdigit():
173171
break
174172
c = int(s[i])
175-
# 溢出判断
176173
if res > flag or (res == flag and c > 7):
177174
return 2**31 - 1 if sign > 0 else -(2**31)
178175
res = res * 10 + c
@@ -190,17 +187,14 @@ class Solution {
190187
if (n == 0) return 0;
191188
int i = 0;
192189
while (s.charAt(i) == ' ') {
193-
// 仅包含空格
194190
if (++i == n) return 0;
195191
}
196192
int sign = 1;
197193
if (s.charAt(i) == '-') sign = -1;
198194
if (s.charAt(i) == '-' || s.charAt(i) == '+') ++i;
199195
int res = 0, flag = Integer.MAX_VALUE / 10;
200196
for (; i < n; ++i) {
201-
// 非数字,跳出循环体
202197
if (s.charAt(i) < '0' || s.charAt(i) > '9') break;
203-
// 溢出判断
204198
if (res > flag || (res == flag && s.charAt(i) > '7'))
205199
return sign > 0 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
206200
res = res * 10 + (s.charAt(i) - '0');
@@ -210,6 +204,36 @@ class Solution {
210204
}
211205
```
212206

207+
#### C++
208+
209+
```cpp
210+
class Solution {
211+
public:
212+
int myAtoi(string s) {
213+
int i = 0, n = s.size();
214+
while (i < n && s[i] == ' ')
215+
++i;
216+
217+
int sign = 1;
218+
if (i < n && (s[i] == '-' || s[i] == '+')) {
219+
sign = s[i] == '-' ? -1 : 1;
220+
++i;
221+
}
222+
223+
int res = 0;
224+
while (i < n && isdigit(s[i])) {
225+
int digit = s[i] - '0';
226+
if (res > INT_MAX / 10 || (res == INT_MAX / 10 && digit > INT_MAX % 10)) {
227+
return sign == 1 ? INT_MAX : INT_MIN;
228+
}
229+
res = res * 10 + digit;
230+
++i;
231+
}
232+
return res * sign;
233+
}
234+
};
235+
```
236+
213237
#### Go
214238

215239
```go
@@ -282,8 +306,6 @@ const myAtoi = function (str) {
282306
#### C#
283307

284308
```cs
285-
// https://leetcode.com/problems/string-to-integer-atoi/
286-
287309
public partial class Solution
288310
{
289311
public int MyAtoi(string str)
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution {
2+
public:
3+
int myAtoi(string s) {
4+
int i = 0, n = s.size();
5+
while (i < n && s[i] == ' ')
6+
++i;
7+
8+
int sign = 1;
9+
if (i < n && (s[i] == '-' || s[i] == '+')) {
10+
sign = s[i] == '-' ? -1 : 1;
11+
++i;
12+
}
13+
14+
int res = 0;
15+
while (i < n && isdigit(s[i])) {
16+
int digit = s[i] - '0';
17+
if (res > INT_MAX / 10 || (res == INT_MAX / 10 && digit > INT_MAX % 10)) {
18+
return sign == 1 ? INT_MAX : INT_MIN;
19+
}
20+
res = res * 10 + digit;
21+
++i;
22+
}
23+
return res * sign;
24+
}
25+
};

solution/0100-0199/0135.Candy/README.md

Lines changed: 29 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,35 @@ function candy(ratings: number[]): number {
203203
}
204204
```
205205

206+
#### Rust
207+
208+
```rust
209+
impl Solution {
210+
pub fn candy(ratings: Vec<i32>) -> i32 {
211+
let n = ratings.len();
212+
let mut left = vec![1; n];
213+
let mut right = vec![1; n];
214+
215+
for i in 1..n {
216+
if ratings[i] > ratings[i - 1] {
217+
left[i] = left[i - 1] + 1;
218+
}
219+
}
220+
221+
for i in (0..n - 1).rev() {
222+
if ratings[i] > ratings[i + 1] {
223+
right[i] = right[i + 1] + 1;
224+
}
225+
}
226+
227+
ratings.iter()
228+
.enumerate()
229+
.map(|(i, _)| left[i].max(right[i]) as i32)
230+
.sum()
231+
}
232+
}
233+
```
234+
206235
#### C#
207236

208237
```cs
@@ -236,46 +265,4 @@ public class Solution {
236265

237266
<!-- solution:end -->
238267

239-
<!-- solution:start -->
240-
241-
### 方法二
242-
243-
<!-- tabs:start -->
244-
245-
#### Java
246-
247-
```java
248-
class Solution {
249-
public int candy(int[] ratings) {
250-
int n = ratings.length;
251-
int up = 0;
252-
int down = 0;
253-
int peak = 0;
254-
int candies = 1;
255-
for (int i = 1; i < n; i++) {
256-
if (ratings[i - 1] < ratings[i]) {
257-
up++;
258-
peak = up + 1;
259-
down = 0;
260-
candies += peak;
261-
} else if (ratings[i] == ratings[i - 1]) {
262-
peak = 0;
263-
up = 0;
264-
down = 0;
265-
candies++;
266-
} else {
267-
down++;
268-
up = 0;
269-
candies += down + (peak > down ? 0 : 1);
270-
}
271-
}
272-
return candies;
273-
}
274-
}
275-
```
276-
277-
<!-- tabs:end -->
278-
279-
<!-- solution:end -->
280-
281268
<!-- problem:end -->

solution/0100-0199/0135.Candy/README_EN.md

Lines changed: 29 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,35 @@ function candy(ratings: number[]): number {
202202
}
203203
```
204204

205+
#### Rust
206+
207+
```rust
208+
impl Solution {
209+
pub fn candy(ratings: Vec<i32>) -> i32 {
210+
let n = ratings.len();
211+
let mut left = vec![1; n];
212+
let mut right = vec![1; n];
213+
214+
for i in 1..n {
215+
if ratings[i] > ratings[i - 1] {
216+
left[i] = left[i - 1] + 1;
217+
}
218+
}
219+
220+
for i in (0..n - 1).rev() {
221+
if ratings[i] > ratings[i + 1] {
222+
right[i] = right[i + 1] + 1;
223+
}
224+
}
225+
226+
ratings.iter()
227+
.enumerate()
228+
.map(|(i, _)| left[i].max(right[i]) as i32)
229+
.sum()
230+
}
231+
}
232+
```
233+
205234
#### C#
206235

207236
```cs
@@ -235,46 +264,4 @@ public class Solution {
235264

236265
<!-- solution:end -->
237266

238-
<!-- solution:start -->
239-
240-
### Solution 2
241-
242-
<!-- tabs:start -->
243-
244-
#### Java
245-
246-
```java
247-
class Solution {
248-
public int candy(int[] ratings) {
249-
int n = ratings.length;
250-
int up = 0;
251-
int down = 0;
252-
int peak = 0;
253-
int candies = 1;
254-
for (int i = 1; i < n; i++) {
255-
if (ratings[i - 1] < ratings[i]) {
256-
up++;
257-
peak = up + 1;
258-
down = 0;
259-
candies += peak;
260-
} else if (ratings[i] == ratings[i - 1]) {
261-
peak = 0;
262-
up = 0;
263-
down = 0;
264-
candies++;
265-
} else {
266-
down++;
267-
up = 0;
268-
candies += down + (peak > down ? 0 : 1);
269-
}
270-
}
271-
return candies;
272-
}
273-
}
274-
```
275-
276-
<!-- tabs:end -->
277-
278-
<!-- solution:end -->
279-
280267
<!-- problem:end -->

0 commit comments

Comments
 (0)