leetcode【中等】73、矩阵置零

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

注意:
不要使用额外空间

思路一:

  1. 使用第一行和第一列做标志位,代替额外空间记录哪一行哪一列要置零。
  2. 遍历数组,当遇到一个零,就把这个零所在的行列的第一个数设为零作为标记,最后再遍历一遍,将有标记的行列统一置零
  3. 注意:第一行第一列本身也可能有零,不仅仅是作为其他行列的标志位,所以额外用两个变量(空间复杂度o(1))记录是否有0
class Solution:
    def setZeroes(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        row=len(matrix)
        col=len(matrix[0])
        row_flag=col_flag=False

        #记录第一行第一列是否有零
        for i in range(row):
            if matrix[i][0]==0:
                col_flag=True
                break
        for j in range(col):
            if matrix[0][j]==0:
                row_flag=True
                break

        #从第二行第二列寻找零
        for i in range(1,row):
            for j in range(1,col):
                if matrix[i][j]==0:
                    matrix[i][0]=0
                    matrix[0][j]=0
        
        #将有标记的行列置零
        for i in range(1,row):
            for j in range(1,col):
                if matrix[i][0]==0 or matrix[0][j]==0:
                    matrix[i][j]=0

        #回头检查第一行第一列
        if row_flag:
            for j in range(col):
                matrix[0][j]=0
        if col_flag:
            for i in range(row):
                matrix[i][0]=0

猜你喜欢

转载自blog.csdn.net/qq_40707462/article/details/113991588