力扣刷题Day 43:矩阵置零(73)

1.题目描述

2.思路

方法1:遍历矩阵的行和列查找0元素并置同行同列的元素为0,新创建一个m*n的矩阵以标记当前的0元素是本身就为0还是被同行同列的元素传染成0的。

方法2:遍历矩阵,记录0元素的行和列,结束遍历后统一置零。

3.代码(Python3)

方法1:

复制代码
import numpy as np

class Solution:
    def setZeroes(self, matrix: List[List[int]]) -> None:
        m, n = len(matrix), len(matrix[0])
        marked = np.ones((m, n), dtype=int)
        for i in range(m):
            for j in range(n):
                if matrix[i][j] == 0 and marked[i][j] != 0:
                    for k in range(n):
                        if matrix[i][k] != 0:
                            matrix[i][k] = 0
                            marked[i][k] = 0
                    for k in range(m):
                        if matrix[k][j] != 0:
                            matrix[k][j] = 0
                            marked[k][j] = 0

方法2:

复制代码
class Solution:
    def setZeroes(self, matrix: List[List[int]]) -> None:
        m, n = len(matrix), len(matrix[0])
        zero_i, zero_j = set(), set()
        for i in range(m):
            for j in range(n):
                if matrix[i][j] == 0:
                    zero_i.add(i)
                    zero_j.add(j)
        for i in zero_i:
            for k in range(n):
                matrix[i][k] = 0
        for j in zero_j:
            for k in range(m):
                matrix[k][j] = 0

方法3:

4.执行情况

方法1:

方法2:

5.感想

方法1的空间复杂度为O(m * n),方法2的空间复杂度为O(m + n),官方题解使用两个标记变量的方法虽然实现了O(1)的空间复杂度但是我觉得没那个必要所以没再仔细研究。

相关推荐
来自天蝎座的孙孙5 分钟前
洛谷P1595讲解(加强版)+错排讲解
python·算法
GawynKing24 分钟前
图论(5)最小生成树算法
算法·图论·最小生成树
试剂界的爱马仕30 分钟前
胶质母细胞瘤对化疗的敏感性由磷脂酰肌醇3-激酶β选择性调控
人工智能·科技·算法·机器学习·ai写作
打不了嗝 ᥬ᭄1 小时前
Linux 信号
linux·开发语言·c++·算法
张子夜 iiii1 小时前
机器学习算法系列专栏:主成分分析(PCA)降维算法(初学者)
人工智能·python·算法·机器学习
一匹电信狗1 小时前
【C++】异常详解(万字解读)
服务器·c++·算法·leetcode·小程序·stl·visual studio
sp422 小时前
白话 LRU 缓存及链表的数据结构讲解(二)
算法
PineappleCoder2 小时前
为什么说发布 - 订阅是代码的 “万能胶水”?解耦逻辑全解析
前端·javascript·算法
墨染点香2 小时前
LeetCode 刷题【43. 字符串相乘】
算法·leetcode·职场和发展
weixin_307779132 小时前
VS Code配置MinGW64编译Ipopt库
开发语言·c++·vscode·算法