Leetcode - 73. 矩阵置零
给定一个
m x n的矩阵,如果一个元素为0,则将其所在行和列的所有元素都设为0。请使用原地算法。
进阶:
一个直观的解决方案是使用O(mn)的额外空间,但这并不是一个好的解决方案。
一个简单的改进方案是使用O(m + n)的额外空间,但这仍然不是最好的解决方案。
你能想出一个仅使用常量空间的解决方案吗?
示例 1:

输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[1,0,1],[0,0,0],[1,0,1]]
示例 2:

输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]
提示:
- m == matrix.length
- n == matrix[0].length
- 1 <= m, n <= 200
- -231 <= matrix[i][j] <= 231 - 1
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/set-matrix-zeroes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解1 2021/9/10 O(mxn)
def setZeroes(matrix: list) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
'''
1 1 1
1 0 1
1 1 1
这题,直接遍历到0,更新hang lie,接着遍历到的0可能就不是原来本身的0了
换个数就好了,matrix的元素是int,那就填inf,
只不过不能用float('inf'),这是float类型,没法转成int,
题目限定了matrix[i][j]∈[-2^31,2^31-1],那就填1<<32
最后再遍历一遍,把inf换成0即可
'''
inf=(1<<32)
m=matrix.__len__()
n=matrix[0].__len__()
if m==1 and n==1: return
for x in range(0,m):
for y in range(0,n):
if matrix[x][y]==0:
# update hang
for j in range(0,n):
matrix[x][j]=inf if matrix[x][j] else 0
# update lie
for i in range(0,m):
matrix[i][y]=inf if matrix[i][y] else 0
# 不用把[x][y]改回来,反正后面还会改一遍
for x in range(0,m):
for y in range(0,n):
if matrix[x][y]==inf: matrix[x][y]=0
# print(matrix)
if __name__ == '__main__':
matrix = [[1, 1, 1], [1, 0, 1], [1, 1, 1]]
setZeroes(matrix)
matrix = [[0, 1, 2, 0], [3, 4, 5, 2], [1, 3, 1, 5]]
setZeroes(matrix)
matrix = [[0, 1, 2, 0]]
setZeroes(matrix)
matrix = [[1]]
setZeroes(matrix)
matrix = [[1],[2],[0],[9]]
setZeroes(matrix)


浙公网安备 33010602011771号