Skip to content

Commit 49fcfcc

Browse files
committed
feat: add solutions to lc problem: No.0369
No.0369.Plus One Linked List
1 parent 1e91f18 commit 49fcfcc

File tree

9 files changed

+227
-12
lines changed

9 files changed

+227
-12
lines changed

solution/0000-0099/0036.Valid Sudoku/README.md

+11-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,17 @@
7272

7373
<!-- 这里可写通用的实现逻辑 -->
7474

75-
求第 i 行、第 j 列,以及第 k 个 `3*3` 宫格是否含有相同数字,如果是,则返回 false。遍历结束,返回 true。
75+
**方法一:一次遍历**
76+
77+
有效的数独满足以下三个条件:
78+
79+
- 每一行中的数字都不重复;
80+
- 每一列中的数字都不重复;
81+
- 每一个 `3*3` 宫格中的数字都不重复。
82+
83+
遍历数独,对于每个数字,判断其所在的行、列、`3*3` 宫格是否已经出现过该数字,如果是,则返回 `false`。遍历结束,返回 `true`
84+
85+
时间复杂度 $O(C)$,空间复杂度 $O(C)$,其中 $C$ 是数独中的空格数。本题中 $C=81$。
7686

7787
<!-- tabs:start -->
7888

solution/0000-0099/0070.Climbing Stairs/README.md

+15-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,21 @@
4444

4545
<!-- 这里可写通用的实现逻辑 -->
4646

47-
想上第 `n` 级台阶,可从第 `n-1` 级台阶爬一级上去,也可从第 `n-2` 级台阶爬两级上去,即:`f(n) = f(n-1) + f(n-2)`。递推求解即可。
47+
**方法一:递推**
48+
49+
我们定义 $f[i]$ 表示爬到第 $i$ 阶楼梯的方法数,那么 $f[i]$ 可以由 $f[i - 1]$ 和 $f[i - 2]$ 转移而来,即:
50+
51+
$$
52+
f[i] = f[i - 1] + f[i - 2]
53+
$$
54+
55+
初始条件为 $f[0] = 1$,$f[1] = 1$,即爬到第 0 阶楼梯的方法数为 1,爬到第 1 阶楼梯的方法数也为 1。
56+
57+
答案即为 $f[n]$。
58+
59+
由于 $f[i]$ 只与 $f[i - 1]$ 和 $f[i - 2]$ 有关,因此我们可以只用两个变量 $a$ 和 $b$ 来维护当前的方法数,空间复杂度降低为 $O(1)$。
60+
61+
时间复杂度 $O(n)$,空间复杂度 $O(1)$。
4862

4963
<!-- tabs:start -->
5064

solution/0000-0099/0074.Search a 2D Matrix/README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848

4949
将二维矩阵逻辑展开,然后二分查找即可。
5050

51-
时间复杂度$O(logmn)$。
51+
时间复杂度 $O(log (m \times n))$。
5252

5353
**方法二:从左下角或右上角搜索**
5454

@@ -60,7 +60,7 @@
6060

6161
若搜索结束依然找不到 target,返回 false。
6262

63-
时间复杂度$O(m + n)$。
63+
时间复杂度 $O(m + n)$。
6464

6565
<!-- tabs:start -->
6666

solution/0300-0399/0369.Plus One Linked List/README.md

+75-4
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,15 @@
4242

4343
<!-- 这里可写通用的实现逻辑 -->
4444

45-
找出链表最右一个 `val ≠ 9` 的节点 target,将 target 值加 1。然后将 target 之后的所有节点值置为 0。
45+
**方法一:链表遍历**
4646

47-
若遇到如 `9 -> 9 -> 9` 的链表,就找不到 target 了,因此,我们可以定义一个虚拟头节点 dummy,初始值为 0。刚开始将 target 指向 dummy,这样就确保链表一定存在一个 `val ≠ 9` 的节点了。
47+
我们先设置一个虚拟头节点 `dummy`,初始值为 $0$,指向链表头节点 `head`
48+
49+
然后从链表头节点开始遍历,找出链表最后一个值不等于 $9$ 的节点 `target`,将 `target` 的值加 $1$。接着将 `target` 之后的所有节点值置为 $0$。
50+
51+
需要注意的是,如果链表中所有节点值都为 $9$,那么遍历结束后,`target` 会指向空节点,这时我们需要将 `dummy` 的值加 $1$,然后返回 `dummy`,否则返回 `dummy` 的下一个节点。
52+
53+
时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为链表的长度。
4854

4955
<!-- tabs:start -->
5056

@@ -60,7 +66,7 @@
6066
# self.next = next
6167
class Solution:
6268
def plusOne(self, head: ListNode) -> ListNode:
63-
dummy = ListNode(val=0, next=head)
69+
dummy = ListNode(0, head)
6470
target = dummy
6571
while head:
6672
if head.val != 9:
@@ -99,7 +105,7 @@ class Solution {
99105
}
100106
head = head.next;
101107
}
102-
target.val += 1;
108+
++target.val;
103109
target = target.next;
104110
while (target != null) {
105111
target.val = 0;
@@ -110,6 +116,71 @@ class Solution {
110116
}
111117
```
112118

119+
### **C++**
120+
121+
```cpp
122+
/**
123+
* Definition for singly-linked list.
124+
* struct ListNode {
125+
* int val;
126+
* ListNode *next;
127+
* ListNode() : val(0), next(nullptr) {}
128+
* ListNode(int x) : val(x), next(nullptr) {}
129+
* ListNode(int x, ListNode *next) : val(x), next(next) {}
130+
* };
131+
*/
132+
class Solution {
133+
public:
134+
ListNode* plusOne(ListNode* head) {
135+
ListNode* dummy = new ListNode(0, head);
136+
ListNode* target = dummy;
137+
while (head) {
138+
if (head->val != 9) target = head;
139+
head = head->next;
140+
}
141+
++target->val;
142+
target = target->next;
143+
while (target) {
144+
target->val = 0;
145+
target = target->next;
146+
}
147+
return dummy->val == 1 ? dummy : dummy->next;
148+
}
149+
};
150+
```
151+
152+
### **Go**
153+
154+
```go
155+
/**
156+
* Definition for singly-linked list.
157+
* type ListNode struct {
158+
* Val int
159+
* Next *ListNode
160+
* }
161+
*/
162+
func plusOne(head *ListNode) *ListNode {
163+
dummy := &ListNode{0, head}
164+
target := dummy
165+
for head != nil {
166+
if head.Val != 9 {
167+
target = head
168+
}
169+
head = head.Next
170+
}
171+
target.Val++
172+
target = target.Next
173+
for target != nil {
174+
target.Val = 0
175+
target = target.Next
176+
}
177+
if dummy.Val == 1 {
178+
return dummy
179+
}
180+
return dummy.Next
181+
}
182+
```
183+
113184
### **...**
114185

115186
```

solution/0300-0399/0369.Plus One Linked List/README_EN.md

+67-2
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
# self.next = next
4040
class Solution:
4141
def plusOne(self, head: ListNode) -> ListNode:
42-
dummy = ListNode(val=0, next=head)
42+
dummy = ListNode(0, head)
4343
target = dummy
4444
while head:
4545
if head.val != 9:
@@ -76,7 +76,7 @@ class Solution {
7676
}
7777
head = head.next;
7878
}
79-
target.val += 1;
79+
++target.val;
8080
target = target.next;
8181
while (target != null) {
8282
target.val = 0;
@@ -87,6 +87,71 @@ class Solution {
8787
}
8888
```
8989

90+
### **C++**
91+
92+
```cpp
93+
/**
94+
* Definition for singly-linked list.
95+
* struct ListNode {
96+
* int val;
97+
* ListNode *next;
98+
* ListNode() : val(0), next(nullptr) {}
99+
* ListNode(int x) : val(x), next(nullptr) {}
100+
* ListNode(int x, ListNode *next) : val(x), next(next) {}
101+
* };
102+
*/
103+
class Solution {
104+
public:
105+
ListNode* plusOne(ListNode* head) {
106+
ListNode* dummy = new ListNode(0, head);
107+
ListNode* target = dummy;
108+
while (head) {
109+
if (head->val != 9) target = head;
110+
head = head->next;
111+
}
112+
++target->val;
113+
target = target->next;
114+
while (target) {
115+
target->val = 0;
116+
target = target->next;
117+
}
118+
return dummy->val == 1 ? dummy : dummy->next;
119+
}
120+
};
121+
```
122+
123+
### **Go**
124+
125+
```go
126+
/**
127+
* Definition for singly-linked list.
128+
* type ListNode struct {
129+
* Val int
130+
* Next *ListNode
131+
* }
132+
*/
133+
func plusOne(head *ListNode) *ListNode {
134+
dummy := &ListNode{0, head}
135+
target := dummy
136+
for head != nil {
137+
if head.Val != 9 {
138+
target = head
139+
}
140+
head = head.Next
141+
}
142+
target.Val++
143+
target = target.Next
144+
for target != nil {
145+
target.Val = 0
146+
target = target.Next
147+
}
148+
if dummy.Val == 1 {
149+
return dummy
150+
}
151+
return dummy.Next
152+
}
153+
```
154+
90155
### **...**
91156

92157
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* struct ListNode {
4+
* int val;
5+
* ListNode *next;
6+
* ListNode() : val(0), next(nullptr) {}
7+
* ListNode(int x) : val(x), next(nullptr) {}
8+
* ListNode(int x, ListNode *next) : val(x), next(next) {}
9+
* };
10+
*/
11+
class Solution {
12+
public:
13+
ListNode* plusOne(ListNode* head) {
14+
ListNode* dummy = new ListNode(0, head);
15+
ListNode* target = dummy;
16+
while (head) {
17+
if (head->val != 9) target = head;
18+
head = head->next;
19+
}
20+
++target->val;
21+
target = target->next;
22+
while (target) {
23+
target->val = 0;
24+
target = target->next;
25+
}
26+
return dummy->val == 1 ? dummy : dummy->next;
27+
}
28+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* type ListNode struct {
4+
* Val int
5+
* Next *ListNode
6+
* }
7+
*/
8+
func plusOne(head *ListNode) *ListNode {
9+
dummy := &ListNode{0, head}
10+
target := dummy
11+
for head != nil {
12+
if head.Val != 9 {
13+
target = head
14+
}
15+
head = head.Next
16+
}
17+
target.Val++
18+
target = target.Next
19+
for target != nil {
20+
target.Val = 0
21+
target = target.Next
22+
}
23+
if dummy.Val == 1 {
24+
return dummy
25+
}
26+
return dummy.Next
27+
}

solution/0300-0399/0369.Plus One Linked List/Solution.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public ListNode plusOne(ListNode head) {
1818
}
1919
head = head.next;
2020
}
21-
target.val += 1;
21+
++target.val;
2222
target = target.next;
2323
while (target != null) {
2424
target.val = 0;

solution/0300-0399/0369.Plus One Linked List/Solution.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
# self.next = next
66
class Solution:
77
def plusOne(self, head: ListNode) -> ListNode:
8-
dummy = ListNode(val=0, next=head)
8+
dummy = ListNode(0, head)
99
target = dummy
1010
while head:
1111
if head.val != 9:

0 commit comments

Comments
 (0)