链接:
题目:
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。
示例 1:
输入: [ [1,1,1], [1,0,1], [1,1,1] ] 输出: [ [1,0,1], [0,0,0],
[1,0,1] ]
我的解法1:找到有0的行数和列数,再分别把该行、列置零
class Solution(object):
def setZeroes(self, matrix):
# 找到有0的行数、列数
num_i, num_j = [], []
for i in range(len(matrix)):
if 0 in matrix[i]:
num_i.append(i)
for j in range(len(matrix[0])):
if 0 in [x[j] for x in matrix]:
num_j.append(j)
# 对应的行列置零
for i in num_i:
matrix[i] = [0 for x in range(len(matrix[0]))]
for j in num_j:
for i in range(len(matrix)):
matrix[i][j] = 0
我的解法2: 第二部分遍历的时候,可以把所有数遍历一遍,如果行列有在记录中,则置零。
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if i in num_i or j in num_j:
matrix[i][j] = 0
别人的解法1:
迭代原始数组,如果我们找到一个条目,比如说cell[i][j]是0,那么我们分别迭代行i和列j,并将所有非零元素设置为一些高负虚拟值(比方说-1000000)。
最后,我们迭代原始矩阵,如果我们发现一个条目等于高负值,那么我们将单元格中的值设置为0。
class Solution(object):
def setZeroes(self, matrix):
MODIFIED = -1000000
R = len(matrix)
C = len(matrix[0])
for r in range(R):
for c in range(C):
if matrix[r][c] == 0:
# We modify the elements in place. Note, we only change the non zeros to MODIFIED
for k in range(C):
matrix[r][k] = MODIFIED if matrix[r][k] != 0 else 0
for k in range(R):
matrix[k][c] = MODIFIED if matrix[k][c] != 0 else 0
for r in range(R):
for c in range(C):
# Make a second pass and change all MODIFIED elements to 0 """
if matrix[r][c] == MODIFIED:
matrix[r][c] = 0