Python实现矩阵置零

LeetCode- 矩阵置零

题目描述

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

进阶:

  • 一个直观的解决方案是使用 O(mn) 的额外空间,但这并不是一个好的解决方案。
  • 一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。
  • 你能想出一个仅使用常量空间的解决方案吗?

示例一:
在这里插入图片描述

示例二:
在这里插入图片描述

思路说明

  • 先对原数组补一圈零,让后对原数据记录下0所在的位置,即:将此位置的bool值设置为True,再遍历填充后的数据,当数据为0且此位置的bool值为True时,将此行此列的数据修改为0。一开始想错题目了,想成了将0所在数据的上下左右修改为0,如果是这样的话,当0在边界时,会出现下标越界的情况,所以才搞的这么复杂,但也实现了。详见代码一
  • 后来发现了自己的错误,想想其实很简单,将数据遍历一遍,遇到0用True来记录,否则用false来记录,这样一来,遍历这个bool类型的数组,值为True时,则修改原数组的所在行和列为0,否则不作修改。详见代码二
    详见代码。欢迎大家批评指正。

代码实现一

class Solution(object):
    def setZeroes(self, matrix):
        """
        :type matrix: List[List[int]]
        :rtype: None Do not return anything, modify matrix in-place instead.
        """
        import numpy as np
        matrix_arr = np.array(matrix)
        row, col = matrix_arr.shape
        matrix_pad = np.pad(matrix_arr, pad_width=((1, 1), (1, 1)), mode="constant", constant_values=(0, 0))
        
        matrix_bool = []
        for r in range(row):
            for c in range(col):
                if matrix_arr[r][c] == 0:
                    matrix_bool.append(True)
                else:
                    matrix_bool.append(False)
        matrix_bool = np.array(matrix_bool).reshape(row, col)
        matrix_bool = np.pad(matrix_bool, pad_width=((1, 1),(1, 1)), mode="constant",
        constant_values=(False, False))

        for r in range(1, row + 1):
            for c in range(1, col + 1):
                if matrix_pad[r][c] == 0 and matrix_bool[r][c] == True:
                    for index in range(col+1):
                        matrix_pad[r][index] = 0
                    for index in range(row+1):
                        matrix_pad[index][c] = 0

        matrix_result = []
        for r in range(1, row + 1):
            for c in range(1, col + 1):
                matrix[r-1][c-1]=matrix_pad[r][c]
 
        return  matrix

代码实现二

class Solution(object):
    def setZeroes(self, matrix):
        """
        :type matrix: List[List[int]]
        :rtype: None Do not return anything, modify matrix in-place instead.
        """
        matrix_bool = []
        for r in range(len(matrix)):
            temp_bool=[]
            for c in range(len(matrix[r])):
                if matrix[r][c] == 0:
                    temp_bool.append(True)
                else:
                    temp_bool.append(False)
            matrix_bool.append(temp_bool)
        for r in range(len(matrix_bool)):
            for c in range(len(matrix_bool[r])):
                if matrix_bool[r][c]:
                    for index in range(len(matrix_bool[r])):
                        matrix[r][index] = 0
                    for index in range(len(matrix_bool)):
                        matrix[index][c] = 0
        return matrix

题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/set-matrix-zeroes

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值