解题思路
我们可以将每行和每列的第一个单元格用作标志。从而使空间复杂降到最低。
求出二维数组的行列M,N
首先判断第一行和第一列是否含有0元素,如果存在,使flag_hang/flag_lie为True,表示该行/列全为0。
遍历整个数组,如果检索到0元素,将对应行列的第一个单元格置为0。
行[1,M],列[1,N]遍历,存在0将该行/列均置为0
如果flag_hang/flag_lie为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. """ M = len(matrix[0]) N = len(matrix) flag_hang,flag_lie = False,False #查看第一行有没有0 for i in range(M): if matrix[0][i] == 0: flag_hang = True #查看第一列有没有0 for i in range(N): if matrix[i][0] == 0: flag_lie = True for i in range(N): for j in range(M): if matrix[i][j] == 0: matrix[0][j] = 0 matrix[i][0] = 0 for i in range(1,N): #对横轴遍历 if matrix[i][0] == 0: for j in range(M): matrix[i][j] = 0 for j in range(1,M): #对纵轴遍历 if matrix[0][j] == 0: for i in range(1,N): matrix[i][j] = 0 if flag_hang == True: for j in range(M): matrix[0][j] = 0 if flag_lie == True: for i in range(N): matrix[i][0] = 0 return matrix