Python 中將矩陣置零


假設我們有一個矩陣,如果矩陣中的一個元素為 0,則將該矩陣的整行和整列都設為 0。轉換將在原地進行。因此,如果矩陣為 -

101
111
111

則輸出將為 -

000
101
101

讓我們看看步驟 -

  • n := 行數,m := 列數,設定標誌 := false
  • 如果 mat[0, 0] = 0,則設定標誌 := true
  • 設定 row := false,col := false
  • 對於 i 的範圍從 1 到 n
    • 如果 mat[i, 0] = 0,則設定 col := True 並中斷迴圈
  • 對於 i 的範圍從 1 到 m
    • 如果 mat[0, i] = 0,則設定 row := True 並中斷迴圈
  • 對於 i 的範圍從 1 到 n
    • 對於 j 的範圍從 1 到 m
      • 如果 mat[i, j] = 0,則設定 mat[i, 0] = 0 和 mat[0, j] := 0
  • 對於 i 的範圍從 1 到 n
    • 對於 j 的範圍從 1 到 m
      • 如果 mat[i, 0] = 0 且 mat[0, j] = 0,則設定 mat[i, j] = 0
  • 如果設定了標誌
    • 對於 i 的範圍從 0 到 n,mat [i, 0] := 0
    • 對於 i 的範圍從 0 到 m,mat[0, i] := 0
  • 否則
    • 如果設定了 col,則對於 i 的範圍從 0 到 n,mat [i, 0] := 0
    • 如果設定了 row,則對於 i 的範圍從 0 到 m,mat [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]]

更新於: 2020年5月4日

2K+ 瀏覽量

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告