给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。
错解:
错在给矩阵赋值想的太简单了,切片是那样切没错,但是赋值不能这么赋值
class Solution: def setZeroes(self, matrix: List[List[int]]) -> None: """ Do not return anything, modify matrix in-place instead. """ for i in range(len(matrix)): for j in range(len(matrix[0])): if matrix[i][j]==0:#以下都错 matrix[:,j]=0 matrix[i]=0 return matrix
正解:
先建立两个表,分别存储行列的下标,到时候要把行列的下标都变成0列表进行矩阵的赋值。注意一下矩阵是怎么赋值的
class Solution: def setZeroes(self, matrix: List[List[int]]) -> None: """ Do not return anything, modify matrix in-place instead. """ m=len(matrix) n=len(matrix[0]) row=[] col=[] for i in range(m): for j in range(n): if matrix[i][j]==0: row.append(i) col.append(j) for i in row: matrix[i]=[0 for _ in range(n)] for i in range(m):#这里也要注意,不是遍历数组,而是数组的长度,先遍历外面的长度 for j in col: matrix[i][j]=0 #这里注意 return matrix