每日力扣:零矩阵
题目来源:leetcode
题目描述如下:
编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。
输入:
[
[1,1,1],
[1,0,1],
[1,1,1]
]
输出:
[
[1,0,1],
[0,0,0],
[1,0,1]
]
示例2:
输入:
[
[0,1,2,0],
[3,4,5,2],
[1,3,1,5]
]
输出:
[
[0,0,0,0],
[0,4,5,0],
[0,3,1,0]
]
对于这道题来说,猛的一看感觉挺简单的,实际上也不难,只要没有想的太复杂完全可以做出来。
本次题解采用的是开辟了两个数组row和column来分别存储出现数字0的行和列的值。
最后在对所有的数据进行遍历,如果遍历到的那个值的行列坐标存在于上述两个数组中,则置零。
复杂度分析
- 时间复杂度:O(M)O(N),其中M、 N 分别代表数组matrix的行列值 。
- 空间复杂度:O(M)+O(N),又重新开辟了两个数组来存放对应的行列值。
以下代码为python3的代码。
class Solution:
def setZeroes(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
row, column = len(matrix) * [0], len(matrix[0]) * [0]
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if matrix[i][j] == 0:
row[i] = 1
column[j] = 1
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if row[i] == 1 or column[j] == 1:
matrix[i][j] = 0
最终,经leetcode 平台检验,正确通过。