python每日一题——18矩阵置零

题目

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

示例 1:
输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[1,0,1],[0,0,0],[1,0,1]]
示例 2:
输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]

答案

这个问题可以使用原地算法在一行一行地遍历矩阵的同时解决。当我们发现一个元素为0时,我们需要将这个元素所在行和列的所有元素都设为0。为了防止在遍历过程中越界,我们需要记录行和列的起始和结束位置。

具体来说,我们可以从第一行开始,从左到右遍历每一列。在遍历过程中,如果我们发现一个元素为0,则将该元素所在行和列的所有元素都设为0。为了不越界,我们需要确保每次只修改当前遍历到的元素以及它右边和下边的元素。

当我们处理完第一行后,我们可以将行和列的起始位置向右移动一位,然后从第二行开始重复上述过程,直到处理完所有行。

以下是实现这个算法的Python代码:

def setZeroes(matrix):
    if not matrix:
        return []
    m = len(matrix)
    n = len(matrix[0])
    first_row = True
    first_col = True
    for i in range(m):
        for j in range(n):
            if matrix[i][j] == 0:
                matrix[i][j] = 0
                if first_row:
                    first_row = False
                    for k in range(m):
                        matrix[k][j] = 0
                if first_col:
                    first_col = False
                    for k in range(n):
                        matrix[i][k] = 0
    return matrix

代码注释:

  • 首先检查输入矩阵是否为空,如果为空则返回空列表。
  • 初始化行和列的起始位置为第一行和第一列。
  • 遍历每一行和每一列,如果发现一个元素为0,则将该元素设为0。
  • 如果当前处理的是第一行或第一列,则需要将该行或该列的所有元素都设为0。
  • 最后返回处理后的矩阵。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WY_记录

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值