力扣刷题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)的空间复杂度但是我觉得没那个必要所以没再仔细研究。

相关推荐
夜思红尘4 小时前
算法--双指针
python·算法·剪枝
散峰而望4 小时前
【算法竞赛】C++函数详解:从定义、调用到高级用法
c语言·开发语言·数据结构·c++·算法·github
CoderCodingNo4 小时前
【GESP】C++五级真题(贪心思想考点) luogu-B4071 [GESP202412 五级] 武器强化
开发语言·c++·算法
我有一些感想……4 小时前
An abstract way to solve Luogu P1001
c++·算法·ai·洛谷·mlp
前端小L4 小时前
双指针专题(三):去重的艺术——「三数之和」
javascript·算法·双指针与滑动窗口
在风中的意志4 小时前
[数据库SQL] [leetcode] 2388. 将表中的空值更改为前一个值
数据库·sql·leetcode
智者知已应修善业5 小时前
【求等差数列个数/无序获取最大最小次大次小】2024-3-8
c语言·c++·经验分享·笔记·算法
还不秃顶的计科生6 小时前
LeetCode 热题 100第二题:字母易位词分组python版本
linux·python·leetcode
LYFlied6 小时前
【每日算法】LeetCode 416. 分割等和子集(动态规划)
数据结构·算法·leetcode·职场和发展·动态规划
多米Domi0116 小时前
0x3f 第19天 javase黑马81-87 ,三更1-23 hot100子串
python·算法·leetcode·散列表