[leetcode]矩阵置零

给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法

这个题目比较麻烦的在于要求使用原地算法,所以思路上是对需要置零的行和列进行一定的标记,而这个标记应该放在矩阵中,于是我们遍历两次矩阵,碰到一个0,就把该列的第一个以及该行的第一个置位0,然后再遍历一次矩阵,把打上标记的行和列置位0即可,这样做有个问题,就是第一行和第一列,它们的标记重合了,都是(0,0)这个元素,所以,把第一列的标记单独的拿出来,如果本身有0的话,就给它标记一下,然后,每行都从第二个元素开始遍历(因为第一个已经检查过了),第二次遍历的时候,先对第一行和第一列以外的数据进行修改,然后再分别对第一行和第一列进行修改,就可以了;

lass Solution:
    def setZeroes(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        r = len(matrix)
        l = len(matrix[0])
        is_col = False
        for i in range(r):
            if matrix[i][0] == 0:
                is_col = True
            for j in range(1, l):
                if matrix[i][j] == 0:
                    matrix[i][0] = 0
                    matrix[0][j] = 0
        for i in range(1, r):
            for j in range(1, l):
                if matrix[i][0] == 0 or matrix[0][j] == 0:
                    matrix[i][j] = 0
        if matrix[0][0] == 0:
            for j in range(l):
                matrix[0][j] = 0
        if is_col:
            for i in range(r):
                matrix[i][0] = 0

 

posted @ 2021-01-10 16:26  随风EK  阅读(119)  评论(0)    收藏  举报