题目:
给定一个数组matrix(m*n),若某个位置值为0,则将该行该列的值都设为0
思路:
最直接的想法是,直接对数组进行遍历,遇到0则将该行该列都置0.但这样会导致重复和混乱。
再想到重新建立一个矩阵,新矩阵的值来记录该位置是原值还是0,但比较浪费空间O(m*n)。
考虑空间后,新建立一个O(m+n)的向量,用来存储对应行和列是否置零O(m+n)。
再考虑用首行和首列来存储对应行和列是否置零。而首行首列是否置零存储在外部连个变量里O(1).
代码(python):
class Solution(object):
def setZeroes(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: void Do not return anything, modify matrix in-place instead.
"""
row = 1
col = 1
for i in range(len(matrix)):
if matrix[i][0]==0:
col = 0
break
for j in range(len(matrix[0])):
if matrix[0][j]==0:
row = 0
break
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if matrix[i][j]==0:
matrix[0][j] = 0
matrix[i][0] = 0
for i in range(len(matrix)-1):
for j in range(len(matrix[0])-1):
if matrix[0][j+1]==0 or matrix[i+1][0]==0:
matrix[i+1][j+1] = 0
for i in range(len(matrix)):
if col==0:
matrix[i][0]=0
for j in range(len(matrix[0])):
if row==0:
matrix[0][j] = 0