73.矩阵置零
题目来源:
LeetCode题目:73. 矩阵置零 - 力扣(LeetCode)
解题思路:
只想到了空间复杂度为 O(m+n) 的解法。新建两个数组,一个存放需要置0 的行,另一个存放需要置 0 的列,遍历完所给矩阵后根据数组元素的值来修改矩阵。
解题代码:
#python3
class Solution:def setZeroes(self, matrix: List[List[int]]) -> None:"""Do not return anything, modify matrix in-place instead."""row=[1]*len(matrix)column=[1]*len(matrix[0])for i in range(len(matrix)):for j in range(len(matrix[0])):if matrix[i][j]==0:row[i]=0column[j]=0for i in range(len(row)):if row[i]==0:for j in range(len(matrix[0])):matrix[i][j]=0for j in range(len(column)):if column[j]==0:for i in range(len(matrix)):matrix[i][j]=0
总结:
官方题解给出了三种解法。第一种是两个标记数组。第二种是使用两个标记变量标记第一行或者第一列是否包含0,然后将第一行和第一列作为标记数组标记取余行列。第三种是使用一个标记变量标记第一列是否包含0,然后用第一列的第一个元素标记第一行是否存在0,但是为了防止每一列的第一个元素被提前更新,需要倒序遍历矩阵。