Skip to content

Commit e6ba4df

Browse files
committed
feat: update solutions to leetcode problem: No.0073
1 parent c24c47a commit e6ba4df

File tree

5 files changed

+334
-125
lines changed

5 files changed

+334
-125
lines changed

solution/0000-0099/0073.Set Matrix Zeroes/README.md

+157
Original file line numberDiff line numberDiff line change
@@ -50,22 +50,179 @@
5050

5151
<!-- 这里可写通用的实现逻辑 -->
5252

53+
### 方法一:使用两个标记数组
54+
55+
用两个数组标记每一行、每一列是否出现零。
56+
57+
遍历原数组,若元素为 0,将元素所在的行、列所对应的标记数组的位置为 true。
58+
59+
最后遍历原数组,用标记数组更新原数组。
60+
61+
### 方法二:使用两个标记变量
62+
63+
用矩阵的第一行和第一列代替方法一中的两个标记数组,以达到 `O(1)` 的额外空间。但这样会导致原数组的第一行和第一列被修改,无法记录它们是否原本包含 0。因此我们需要额外使用两个标记变量分别记录第一行和第一列是否原本包含 0。
64+
5365
<!-- tabs:start -->
5466

5567
### **Python3**
5668

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

71+
方法一:
72+
5973
```python
74+
class Solution:
75+
def setZeroes(self, matrix: List[List[int]]) -> None:
76+
"""
77+
Do not return anything, modify matrix in-place instead.
78+
"""
79+
m, n = len(matrix), len(matrix[0])
80+
zero_rows = [False] * m
81+
zero_cols = [False] * n
82+
for i in range(m):
83+
for j in range(n):
84+
if matrix[i][j] == 0:
85+
zero_rows[i] = zero_cols[j] = True
86+
for i in range(m):
87+
for j in range(n):
88+
if zero_rows[i] or zero_cols[j]:
89+
matrix[i][j] = 0
90+
```
6091

92+
方法二:
93+
94+
```python
95+
class Solution:
96+
def setZeroes(self, matrix: List[List[int]]) -> None:
97+
"""
98+
Do not return anything, modify matrix in-place instead.
99+
"""
100+
m, n = len(matrix), len(matrix[0])
101+
first_row_has_zero = any(matrix[0][j] == 0 for j in range(n))
102+
first_col_has_zero = any(matrix[i][0] == 0 for i in range(m))
103+
104+
for i in range(1, m):
105+
for j in range(1, n):
106+
if matrix[i][j] == 0:
107+
matrix[i][0] = matrix[0][j] = 0
108+
109+
for i in range(1, m):
110+
for j in range(1, n):
111+
if matrix[i][0] == 0 or matrix[0][j] == 0:
112+
matrix[i][j] = 0
113+
114+
if first_row_has_zero:
115+
for j in range(n):
116+
matrix[0][j] = 0
117+
118+
if first_col_has_zero:
119+
for i in range(m):
120+
matrix[i][0] = 0
61121
```
62122

63123
### **Java**
64124

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

127+
方法一:
128+
129+
```java
130+
class Solution {
131+
public void setZeroes(int[][] matrix) {
132+
int m = matrix.length, n = matrix[0].length;
133+
boolean[] zeroRows = new boolean[m];
134+
boolean[] zeroCols = new boolean[n];
135+
for (int i = 0; i < m; ++i) {
136+
for (int j = 0; j < n; ++j) {
137+
if (matrix[i][j] == 0) {
138+
zeroRows[i] = zeroCols[j] = true;
139+
}
140+
}
141+
}
142+
for (int i = 0; i < m; ++i) {
143+
for (int j = 0; j < n; ++j) {
144+
if (zeroRows[i] || zeroCols[j]) {
145+
matrix[i][j] = 0;
146+
}
147+
}
148+
}
149+
}
150+
}
151+
```
152+
153+
方法二:
154+
67155
```java
156+
class Solution {
157+
public void setZeroes(int[][] matrix) {
158+
int m = matrix.length, n = matrix[0].length;
159+
boolean firstRowHasZero = false;
160+
boolean firstColHasZero = false;
161+
for (int j = 0; j < n; ++j) {
162+
if (matrix[0][j] == 0) {
163+
firstRowHasZero = true;
164+
break;
165+
}
166+
}
167+
for (int i = 0; i < m; ++i) {
168+
if (matrix[i][0] == 0) {
169+
firstColHasZero = true;
170+
break;
171+
}
172+
}
173+
for (int i = 1; i < m; ++i) {
174+
for (int j = 1; j < n; ++j) {
175+
// 更新标记数组
176+
if (matrix[i][j] == 0) {
177+
matrix[i][0] = matrix[0][j] = 0;
178+
}
179+
}
180+
}
181+
for (int i = 1; i < m; ++i) {
182+
for (int j = 1; j < n; ++j) {
183+
if (matrix[i][0] == 0 || matrix[0][j] == 0) {
184+
matrix[i][j] = 0;
185+
}
186+
}
187+
}
188+
if (firstRowHasZero) {
189+
for (int j = 0; j < n; ++j) {
190+
matrix[0][j] = 0;
191+
}
192+
}
193+
if (firstColHasZero) {
194+
for (int i = 0; i < m; ++i) {
195+
matrix[i][0] = 0;
196+
}
197+
}
198+
}
199+
}
200+
```
68201

202+
### **C++**
203+
204+
```cpp
205+
class Solution {
206+
public:
207+
void setZeroes(vector<vector<int>>& matrix) {
208+
int m = matrix.size(), n = matrix[0].size();
209+
vector<bool> zeroRows(m), zeroCols(n);
210+
for (int i = 0; i < m; i++) {
211+
for (int j = 0; j < n; j++) {
212+
if (matrix[i][j] == 0) {
213+
zeroRows[i] = zeroCols[j] = true;
214+
}
215+
}
216+
}
217+
for (int i = 0; i < m; i++) {
218+
for (int j = 0; j < n; j++) {
219+
if (zeroRows[i] || zeroCols[j]) {
220+
matrix[i][j] = 0;
221+
}
222+
}
223+
}
224+
}
225+
};
69226
```
70227
71228
### **...**

solution/0000-0099/0073.Set Matrix Zeroes/README_EN.md

+144
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,158 @@
8080

8181
### **Python3**
8282

83+
Solution 1:
84+
8385
```python
86+
class Solution:
87+
def setZeroes(self, matrix: List[List[int]]) -> None:
88+
"""
89+
Do not return anything, modify matrix in-place instead.
90+
"""
91+
m, n = len(matrix), len(matrix[0])
92+
zero_rows = [False] * m
93+
zero_cols = [False] * n
94+
for i in range(m):
95+
for j in range(n):
96+
if matrix[i][j] == 0:
97+
zero_rows[i] = zero_cols[j] = True
98+
for i in range(m):
99+
for j in range(n):
100+
if zero_rows[i] or zero_cols[j]:
101+
matrix[i][j] = 0
102+
```
103+
104+
Solution 2:
84105

106+
```python
107+
class Solution:
108+
def setZeroes(self, matrix: List[List[int]]) -> None:
109+
"""
110+
Do not return anything, modify matrix in-place instead.
111+
"""
112+
m, n = len(matrix), len(matrix[0])
113+
first_row_has_zero = any(matrix[0][j] == 0 for j in range(n))
114+
first_col_has_zero = any(matrix[i][0] == 0 for i in range(m))
115+
116+
for i in range(1, m):
117+
for j in range(1, n):
118+
if matrix[i][j] == 0:
119+
matrix[i][0] = matrix[0][j] = 0
120+
121+
for i in range(1, m):
122+
for j in range(1, n):
123+
if matrix[i][0] == 0 or matrix[0][j] == 0:
124+
matrix[i][j] = 0
125+
126+
if first_row_has_zero:
127+
for j in range(n):
128+
matrix[0][j] = 0
129+
130+
if first_col_has_zero:
131+
for i in range(m):
132+
matrix[i][0] = 0
85133
```
86134

87135
### **Java**
88136

137+
Solution 1:
138+
89139
```java
140+
class Solution {
141+
public void setZeroes(int[][] matrix) {
142+
int m = matrix.length, n = matrix[0].length;
143+
boolean[] zeroRows = new boolean[m];
144+
boolean[] zeroCols = new boolean[n];
145+
for (int i = 0; i < m; ++i) {
146+
for (int j = 0; j < n; ++j) {
147+
if (matrix[i][j] == 0) {
148+
zeroRows[i] = zeroCols[j] = true;
149+
}
150+
}
151+
}
152+
for (int i = 0; i < m; ++i) {
153+
for (int j = 0; j < n; ++j) {
154+
if (zeroRows[i] || zeroCols[j]) {
155+
matrix[i][j] = 0;
156+
}
157+
}
158+
}
159+
}
160+
}
161+
```
162+
163+
Solution 2:
164+
165+
```java
166+
class Solution {
167+
public void setZeroes(int[][] matrix) {
168+
int m = matrix.length, n = matrix[0].length;
169+
boolean firstRowHasZero = false;
170+
boolean firstColHasZero = false;
171+
for (int j = 0; j < n; ++j) {
172+
if (matrix[0][j] == 0) {
173+
firstRowHasZero = true;
174+
break;
175+
}
176+
}
177+
for (int i = 0; i < m; ++i) {
178+
if (matrix[i][0] == 0) {
179+
firstColHasZero = true;
180+
break;
181+
}
182+
}
183+
for (int i = 1; i < m; ++i) {
184+
for (int j = 1; j < n; ++j) {
185+
if (matrix[i][j] == 0) {
186+
matrix[i][0] = matrix[0][j] = 0;
187+
}
188+
}
189+
}
190+
for (int i = 1; i < m; ++i) {
191+
for (int j = 1; j < n; ++j) {
192+
if (matrix[i][0] == 0 || matrix[0][j] == 0) {
193+
matrix[i][j] = 0;
194+
}
195+
}
196+
}
197+
if (firstRowHasZero) {
198+
for (int j = 0; j < n; ++j) {
199+
matrix[0][j] = 0;
200+
}
201+
}
202+
if (firstColHasZero) {
203+
for (int i = 0; i < m; ++i) {
204+
matrix[i][0] = 0;
205+
}
206+
}
207+
}
208+
}
209+
```
90210

211+
### **C++**
212+
213+
```cpp
214+
class Solution {
215+
public:
216+
void setZeroes(vector<vector<int>>& matrix) {
217+
int m = matrix.size(), n = matrix[0].size();
218+
vector<bool> zeroRows(m), zeroCols(n);
219+
for (int i = 0; i < m; i++) {
220+
for (int j = 0; j < n; j++) {
221+
if (matrix[i][j] == 0) {
222+
zeroRows[i] = zeroCols[j] = true;
223+
}
224+
}
225+
}
226+
for (int i = 0; i < m; i++) {
227+
for (int j = 0; j < n; j++) {
228+
if (zeroRows[i] || zeroCols[j]) {
229+
matrix[i][j] = 0;
230+
}
231+
}
232+
}
233+
}
234+
};
91235
```
92236
93237
### **...**

0 commit comments

Comments
 (0)