题目描述如下:
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
题意是将将矩阵中0所在行所在列的数据全变为0,且最好是只使用常量空间;
- 首先我们使用两个变量来记录第一行和第一列是否需要置为0;
- 遍历矩阵(下标从[1,1]开始),当遇到0时,我们将其所在行和所在列的首元素置为0,即我们使用第一行第一列来记录其所在行和列是否需要置为0;
- 之后我们使用第一行第一列的值来置位数组中的数;
- 根据第一步中的两个变量来决定是否改变第一行第一列;
python代码如下:
class Solution(object):
def setZeroes(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: void Do not return anything, modify matrix in-place instead.
"""
if matrix == None or len(matrix) == 0:
return
first_row = first_col = False
for j in range(len(matrix[0])):
if matrix[0][j] == 0:
first_row = True
break
for i in range(len(matrix)):
if matrix[i][0] == 0:
first_col = True
break
for i in range(1, len(matrix)):
for j in range(1, len(matrix[0])):
if matrix[i][j] == 0:
matrix[i][0] = 0
matrix[0][j] = 0
for i in range(1, len(matrix)):
if matrix[i][0] == 0:
for j in range(1, len(matrix[0])):
matrix[i][j] = 0
for j in range(1, len(matrix[0])):
if matrix[0][j] == 0:
for i in range(1, len(matrix)):
matrix[i][j] = 0
if first_row == True:
for j in range(len(matrix[0])):
matrix[0][j] = 0
if first_col == True:
for i in range(len(matrix)):
matrix[i][0] = 0