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 @   ouyangxx  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示