每日一题力扣73

给定一个 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
原文地址:https://www.cnblogs.com/liuxiangyan/p/14472237.html