在Python中设置矩阵零

考虑我们有一个矩阵,在该矩阵中,如果一个元素为0,则使该矩阵的整个行和列均为0。转换将就位。所以如果矩阵是-

1个01个
1个1个1个
1个1个1个

然后输出将是-

000
1个01个
1个01个

让我们看看步骤-

  • 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]]