LC 73矩阵置零Set Matrix Zeroes 中等
若某元素为 0,则把它所在行和列全部置 0,要求原地、常数空间。
思路 首行首列做标记数组:内层按标记置零,再用两个变量处理首行首列自身。空间 O(1)。
class Solution: def setZeroes(self, matrix: List[List[int]]) -> None: m, n = len(matrix), len(matrix[0]) first_row = any(matrix[0][j] == 0 for j in range(n)) first_col = any(matrix[i][0] == 0 for i in range(m)) for i in range(1, m): # 首行首列记标记 for j in range(1, n): if matrix[i][j] == 0: matrix[i][0] = matrix[0][j] = 0 for i in range(1, m): # 按标记置零内部 for j in range(1, n): if matrix[i][0] == 0 or matrix[0][j] == 0: matrix[i][j] = 0 if first_row: for j in range(n): matrix[0][j] = 0 if first_col: for i in range(m): matrix[i][0] = 0