73. 矩阵置零

  1. 题目链接

  2. 解题思路:如何原地,是困难点。我们可以使用原有的矩阵,来存放某些信息。原来的矩阵第一行,matrix[0][i]如果等于0,代表第i列有0,原来的矩阵第一列,matrix[i][0]如果等于0,代表第i列有0。还有一个注意点,就是matrix[0][0]代表什么?这是一个歧义的点,所以不存放数据,单独用两个变量,first_r如果等于0,代表第0行有0,first_c如果等于0,代表第0列有0。

  3. 代码

    class Solution:
        def setZeroes(self, matrix: List[List[int]]) -> None:
            # 使用第0行和第0列, 判断是否有0出现,然后再统一修改矩阵
            # 例如,matrix[0][i] == 0,代表的是第i列有一个0
            # matrix[i][0] == 0,代表的是第i行有一个0
            r = len(matrix)
            c = len(matrix[0])   
            # 第0行和第1列的零的个数要分别统计,因为共用了matrix[0][0]
            first_r = -1
            first_c = -1
            for i in range(0, c, 1): # 统计第一行是否有0
                if matrix[0][i] == 0:
                    first_r = 0
                    break
            for i in range(0, r, 1): # 统计第一列是否有0
                if matrix[i][0] == 0:
                    first_c = 0
                    break
            # 统计其他的是否有0
            for i in range(1, r, 1) :
                for j in range(1, c, 1):
                    if matrix[i][j] == 0:
                        matrix[i][0] = 0
                        matrix[0][j] = 0
                    
            
            # 开始改变矩阵
            for i in range(1, r, 1):
                for j in range(1, c, 1):
                    if matrix[i][0] == 0 or matrix[0][j] == 0:
                        matrix[i][j] = 0
            # 单独处理第0行和第0列
            if first_c == 0:   # 第一列
                for i in range(0, r, 1):
                    matrix[i][0] = 0
            if first_r == 0: # 第一行
                for j in range(0, c, 1):
                    matrix[0][j] = 0
            
    
            
    
posted @ 2024-12-22 21:07  ouyangxx  阅读(37)  评论(0)    收藏  举报