Leetcode——矩阵

73矩阵置零

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

方法1:复制原数组

时间复杂度:O(MN*(M+N))
空间复杂度:O(MN)
把输入的原始数组复制一份,那么根据copy出来的数组判断某个位置是否为 0,就是原始数组中的该位置是0。遇到 matrix_copy 的一个位置是 0,那么直接修改 matrix 的行列全部是 0。

class Solution:
    def setZeroes(self, matrix: List[List[int]]) -> None:
        if not matrix or not matrix[0]:
            return
        M, N = len(matrix), len(matrix[0])
        matrix_copy = copy.deepcopy(matrix)  #注意是deepcpoy
        for i in range(M):
            for j in range(N):
                if matrix_copy[i][j] == 0:
                    for k in range(M):
                        matrix[k][j] = 0
                    for k in range(N):
                        matrix[i][k] = 0

方法2:记录数组

时间复杂度:O(MN)
空间复杂度:O(M+N)
遍历一次矩阵,记录一下每行、列是否出现了 0;如果出现了 0,最终将此行列置为 0

class Solution:
    def setZeroes(self, matrix: List[List[int]]) -> None:
        if not matrix or not matrix[0]:
            return
        M, N = len(matrix), len(matrix[0])
        row, col = set(), set()
        for i in range(M):
            for j in range(N):
                if matrix[i][j] == 0:
                    row.add(i)
                    col.add(j)
        for i in range(M):
            for j in range(N):
                if i in row or j in col:
                    matrix[i][j] = 0

方法3:矩阵表示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值