给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。
示例 1:
输入:
[
[1,1,1],
[1,0,1],
[1,1,1]
]
输出:
[
[1,0,1],
[0,0,0],
[1,0,1]
]
示例 2:
输入:
[
[0,1,2,0],
[3,4,5,2],
[1,3,1,5]
]
输出:
[
[0,0,0,0],
[0,4,5,0],
[0,3,1,0]
]
进阶:
- 一个直接的解决方案是使用 O(mn) 的额外空间,但这并不是一个好的解决方案。
- 一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。
- 你能想出一个常数空间的解决方案吗?
代码:
class Solution(object):
def setZeroes(self, matrix):
row = set()
col = set()
for i, x in enumerate(matrix):
for j ,v in enumerate(x):
if v == 0:
row.add(i)
col.add(j)
for i in range(len(matrix)):
for j in range(len(matrix[i])):
if i in row or j in col:
matrix[i][j] = 0
总结:
1.先设矩阵为中值0的元素的行和列的集合(去重)。
2.然后遍历矩阵,找到值为0的元素,并记录其行和列
3.再遍历矩阵,判断其行 或 列是否在集合中,True则替换为0
PS:为了严谨性,开始可以加个if not matrix:return 之类的,不过没加也给通过了