class Solution(object):
def setZeroes(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: None Do not return anything, modify matrix in-place instead.
"""
# 思路:
# corner case: matrix为空,matrix是行向量/列向量
# 1.判断第一行、第一列是否包含0,存在firstrow和firstcolumn中(False/True)
# 2.从(1,1)开始遍历,如果发现元素为0,将对应行的第一个元素和对应列的第一个元素置为0
# 3.遍历第一行,如果元素为0,将这一列的元素置为0
# 4.遍历第一列,如果元素为0,将这一行的元素置为0
# 5.根据firstrow和firstcolumn将矩阵的第一行和第一列置为0
if len(matrix) == 0:
return matrix
n = len(matrix[0])
m = len(matrix)
if m == 1:
for j in range(n):
if matrix[0][j] == 0:
for j in range(n):
matrix[0][j] = 0
return matrix
if n == 1:
for i in range(m):
if matrix[i][0] == 0:
for i in range(m):
matrix[i][0] = 0
return matrix
firstrow = False
for j in range(n):
if matrix[0][j] == 0:
firstrow = True
break
firstcolumn = False
for i in range(m):
if matrix[i][0] == 0:
firstcolumn = True
break
for i in range(1, m):
for j in range(1, n):
if matrix[i][j] == 0:
matrix[0][j] = 0
matrix[i][0] = 0
for i in range(1, m):
if matrix[i][0] == 0:
for j in range(1, n):
matrix[i][j] = 0
for j in range(1, n):
if matrix[0][j] == 0:
for i in range(1, m):
matrix[i][j] = 0
if firstrow:
for j in range(n):
matrix[0][j] = 0
if firstcolumn:
for i in range(m):
matrix[i][0] = 0
return matrix
网友评论