LeetCode 73. Set Matrix Zeroes
考点 | 难度 |
---|---|
Hash Map | Medium |
题目
Given an m x n
integer matrix matrix, if an element is 0, set its entire row and column to 0’s.
You must do it in place.
思路
如果matrix[i][j]
是0,把matrix[i][0]
和matrix[0][j]
都设为0,如果i
或j
等于0单独记录。再traverse一遍,排除第一行和第一列,按照第一行第一列把该换成0的位置换掉。最后根据最开始的记录判断是不是需要把第一行和第一列都换成0.
答案
class Solution:
def setZeroes(self, matrix: List[List[int]]) -> None:
m = len(matrix)
n = len(matrix[0])
first_row_has_zero = False
first_col_has_zero = False
# iterate through matrix to mark the zero row and cols
for row in range(m):
for col in range(n):
if matrix[row][col] == 0:
if row == 0:
first_row_has_zero = True
if col == 0:
first_col_has_zero = True
matrix[row][0] = matrix[0][col] = 0
# iterate through matrix to update the cell to be zero if it's in a zero row or col
for row in range(1, m):
for col in range(1, n):
matrix[row][col] = 0 if matrix[0][col] == 0 or matrix[row][0] == 0 else matrix[row][col]
# update the first row and col if they're zero
if first_row_has_zero:
for col in range(n):
matrix[0][col] = 0
if first_col_has_zero:
for row in range(m):
matrix[row][0] = 0