考虑我们有一个矩阵,在该矩阵中,如果一个元素为0,则使该矩阵的整个行和列均为0。转换将就位。所以如果矩阵是-
1个 | 0 | 1个 |
1个 | 1个 | 1个 |
1个 | 1个 | 1个 |
然后输出将是-
0 | 0 | 0 |
1个 | 0 | 1个 |
1个 | 0 | 1个 |
让我们看看步骤-
n:=行数,m:=列数,设置标志:= false
如果mat [0,0] = 0,则设置标志:= true
设置row:= false和col:= false
对于我在1到n范围内
如果mat [i,0] = 0,则设置col:= True并中断循环
当我在1到m的范围内
如果mat [0,i] = 0,则设置row:= True并中断循环
对于我在1到n范围内
如果mat [i,j] = 0,则设置mat [i,0] = 0和mat [0,j]:= 0
对于1到m范围内的j
对于我在1到n范围内
如果mat [i,0] = 0且mat [0,j] = 0,则设置mat [i,j] = 0
对于1到m范围内的j
如果设置了标志
对于范围从0到n的i,垫子[i,0]:= 0
对于范围从0到m的i,mat [0,i]:= 0
除此以外
如果设置了col,则对于介于0到n范围内的i,使用mat [i,0]:= 0
如果设置了行,则对于i在0到m范围内,垫[0,i]:= 0
让我们看下面的实现以更好地理解-
class Solution(object): def setZeroes(self, matrix): n = len(matrix) m = len(matrix[0]) flag = False if matrix[0][0] == 0: flag = True row = False column = False for i in range(1,n): if matrix[i][0] == 0: column = True break for i in range(1,m): if matrix[0][i] == 0: row = True break for i in range(1,n): for j in range(1,m): if matrix[i][j] == 0: matrix[0][j] = 0 matrix[i][0]=0 for i in range(1,n): for j in range(1,m): if not matrix[i][0] or not matrix[0][j]: matrix[i][j] = 0 if flag: for i in range(n): matrix[i][0] = 0 for i in range(m): matrix[0][i]=0 else: if column: for i in range(n): matrix[i][0]=0 if row: for i in range(m): matrix[0][i]=0 return matrix ob1 = Solution() print(ob1.setZeroes([[1,0,1],[1,1,1],[1,1,1]]))
[[1,0,1],[1,1,1],[1,1,1]]
输出结果
[[0, 0, 0], [1, 0, 1], [1, 0, 1]]