73. Set Matrix Zeroes

有一个m*n的矩阵,如果上面某个位置的值是0,则将其整个行与整个列都设为0

思路:先用两个列表记录哪个行或列的值为0, 然后遍历matrix,如果某位置的行或列为0,则该位置为0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution:
def setZeroes(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: void Do not return anything, modify matrix in-place instead.
"""
# 5 star,
cols = [0 for _ in range(len(matrix))]
rows = [0 for _ in range(len(matrix[0]))]
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if matrix[i][j] == 0:
cols[i], rows[j] = 1, 1
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if cols[i] or rows[j]:
matrix[i][j] = 0

Go:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 5 star, 用两个切片分别记录各行和列是否有0
func setZeroes(matrix [][]int) {
cols := make([]int, len(matrix))
rows := make([]int, len(matrix[0]))

for i, _ := range matrix {
for j, _ := range matrix[0] {
if matrix[i][j] == 0 {
cols[i] = 1
rows[j] = 1
}
}
}

for i, _ := range matrix {
for j, _ := range matrix[0] {
if cols[i] == 1 || rows[j] == 1 {
matrix[i][j] = 0
}
}
}
}