Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[Leetcode][python]Set Matrix Zeroes/矩阵置零

[Leetcode][python]Set Matrix Zeroes/矩阵置零

作者头像
蛮三刀酱
发布于 2019-03-26 08:21:53
发布于 2019-03-26 08:21:53
75800
代码可运行
举报
运行总次数:0
代码可运行

题目大意

如果矩阵中存在0,那么把0所在的行和列都置为0。要求在所给的矩阵上完成操作。 注意:最好的空间复杂度是常数空间

解题思路

参考: https://www.hrwhisper.me/leetcode-set-matrix-zeroes/ https://shenjie1993.gitbooks.io/leetcode-python/073%20Set%20Matrix%20Zeroes.html

思路: 1.创建一个矩阵的拷贝,然后根据这个拷贝进行判断O(MN) 2.创建一个数组,记录矩阵为0的行和列下标O(m+n) 3.把有0的元素映射到首行和首列O(c):详解看代码

代码

这里的复杂度是空间复杂度

O(c)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution(object):
    def setZeroes(self, matrix):
        """
        :type matrix: List[List[int]]
        :rtype: void Do not return anything, modify matrix in-place instead.
        """
        first_row = False
        first_col = False
        m = len(matrix)
        n = len(matrix[0])
        # 第一列若有0,first_col = True
        for i in range(m): 
            if matrix[i][0] == 0:
                first_col = True
        # 第一行若有0,first_row = True
        for j in range(n):
            if matrix[0][j] == 0:
                first_row = True
        # 若中间有0,同时映射到首行首列
        for i in range(1, m):
            for j in range(1, n):
                if matrix[i][j] == 0:
                    matrix[i][0] = matrix[0][j] = 0
        # 然后通过首行首列,将所有改为0的置为0
        for i in range(1, m):
            for j in range(1, n):
                if matrix[0][j] == 0 or matrix[i][0] == 0:
                    matrix[i][j] = 0
        # 最后再把保存好的首行首列是否改为0的信息拿出来置为0
        if first_row:
            for j in range(n):
                matrix[0][j] = 0
        if first_col:
            for i in range(m):
                matrix[i][0] = 0

O(m+n)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution:
    # @param matrix, a list of lists of integers
    # RETURN NOTHING, MODIFY matrix IN PLACE.
    def setZeroes(self, matrix):
        m , n = len(matrix), len(matrix[0])
        row , col = [0 for i in range(m)] , [0 for i in range(n)]
        for i in range(m):
            for j in range(n):
                if not matrix[i][j]:
                    row[i]=col[j]=1
        for i in range(m):
            if row[i]:
                for j in range(n):
                    matrix[i][j]=0

        for j in range(n):
            if col[j]:
                for i in range(m):
                    matrix[i][j]=0

O(mn)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution:
    # @param matrix, a list of lists of integers
    # RETURN NOTHING, MODIFY matrix IN PLACE.
    def setZeroes(self, matrix):
        m , n = len(matrix), len(matrix[0])
        temp = [[matrix[i][j] for j in range(n)] for i in range(m)]
        for i in range(m):
            for j in range(n):
                if not temp[i][j]:
                    self.setZero(i,j,n,m,matrix)

    def setZero(self,row,col,n,m,matrix):
        for i in range(m):
            matrix[i][col]=0
        for j in range(n):
            matrix[row][j]=0

总结

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年10月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Leetcode【73、74】
首先这题最重要的一点,是如何处理置 0 后,不会影响后续遍历结果。也就是要避免在某次操作中我将 a[i][j] 置 0,而之后我遍历到 a[i][j] 元素时,其原本的值丢失,导致最后数组所有元素都是 0。
echobingo
2019/10/09
3960
力扣73——矩阵置零
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。
健程之道
2019/12/31
3340
力扣73.矩阵置零
为了防止脑壳子生锈,之后也会陆续更新算法相关内容,范围是力扣简单和中等难度的题目。日拱一卒,让我们开始吧!
才浅Coding攻略
2022/12/12
1400
力扣73.矩阵置零
LeetCode 73. 矩阵置零
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。
Michael阿明
2020/07/13
3670
LeetCode 73. 矩阵置零
Leetcode 73. Set Matrix Zeroes
版权声明:博客文章都是作者辛苦整理的,转载请注明出处,谢谢! https://blog.csdn.net/Quincuntial/article/details/84930663
Tyan
2019/05/25
4270
​LeetCode刷题实战73:矩阵置零
https://leetcode-cn.com/problems/set-matrix-zeroes/
程序员小猿
2021/01/20
4780
Leetcode No.73 矩阵置零(python版)
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。
week
2021/11/29
4280
Leetcode No.73 矩阵置零(python版)
打卡群刷题总结0720——矩阵置零
链接:https://leetcode-cn.com/problems/set-matrix-zeroes
木又AI帮
2020/07/22
2880
Leetcode 73 Set Matrix Zeroes
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. click
triplebee
2018/01/12
4990
leetcode: 73. Set Matrix Zeroes
Problem # Given a m x n matrix, if an element is 0, set its entire row and column to 0. # Do it in
JNingWei
2018/09/27
2800
73. 矩阵置零
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。
lucifer210
2019/10/24
6280
LeetCode 0073 - Set Matrix Zeroes
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
Reck Zhang
2021/08/11
1600
Leetcode No.73 矩阵置零(C++版)
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。
week
2021/11/29
3380
Leetcode: Set Matrix Zeroes
题目: Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
卡尔曼和玻尔兹曼谁曼
2019/01/22
4120
(Leetcode 2021 刷题计划) 73. 矩阵置零
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。
windism
2021/03/21
5530
【leetcode刷题】20T37-矩阵置零
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。
木又AI帮
2020/03/28
2290
Leetcode 题目解析之 Set Matrix Zeroes
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
ruochen
2022/01/10
1.3K0
LeetCode73,明明就在眼前的答案,怎么就是差一点?
今天是LeetCode第42篇文章,我们来看看LeetCode第73题矩阵置零,set matrix zeroes。
TechFlow-承志
2020/06/03
4180
LeetCode - #73 矩阵置零
我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。
Swift社区
2022/12/10
2650
LeetCode - #73 矩阵置零
73. 矩阵置零
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。
张伦聪zhangluncong
2022/10/26
2270
相关推荐
Leetcode【73、74】
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验