思路:先存储矩阵中数值为0的下标,再依次遍历这些下标(为行与列的所有元素赋0)
我的代码↓
class Solution:
def setZeroes(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
zero_indexes=[]
rows=len(matrix)
cols=len(matrix[0])
for row in range(rows):
for col in range(cols):
if matrix[row][col]==0:
zero_indexes.append([row,col])
for row,col in zero_indexes:
# 所在行设为0
for c in range(cols):
matrix[row][c]=0
# 所在列设为0
for r in range(rows):
matrix[r][col]=0
不过这样会存在一些重复的工作,若原矩阵同列或同行有不止一个0元素,则不必对该列或该行的其它元素重复赋0。因此,我们可以分别单独记录0元素行与列的下标。
题解代码↓
class Solution:
def setZeroes(self, matrix: List[List[int]]) -> None:
m, n = len(matrix), len(matrix[0])
row, col = [False] * m, [False] * n
for i in range(m):
for j in range(n):
if matrix[i][j] == 0:
row[i] = col[j] = True
for i in range(m):
for j in range(n):
if row[i] or col[j]:
matrix[i][j] = 0