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