Computer >> Máy Tính >  >> Lập trình >> Python

Đặt số 0 của ma trận bằng Python

Hãy xem xét chúng ta có một ma trận, trong ma trận đó nếu một phần tử là 0, thì toàn bộ hàng và cột của ma trận đó bằng 0. Việc chuyển đổi sẽ được thực hiện tại chỗ. Vì vậy, nếu ma trận là -

1 0 1
1 1 1
1 1 1

Sau đó, đầu ra sẽ là -

0 0 0
1 0 1
1 0 1

Hãy để chúng tôi xem các bước -

  • n:=số hàng, m:=số cột, đặt cờ:=false
  • if mat [0, 0] =0, then set flag:=true
  • đặt hàng:=false và col:=false
  • cho tôi trong phạm vi từ 1 đến n
    • if mat [i, 0] =0, then set col:=True and break loop
  • cho tôi trong phạm vi từ 1 đến m
    • if mat [0, i] =0, then set row:=True và ngắt vòng lặp
  • cho tôi trong phạm vi từ 1 đến n
    • cho j trong phạm vi từ 1 đến m
      • if mat [i, j] =0, then set mat [i, 0] =0 and mat [0, j]:=0
  • cho tôi trong phạm vi từ 1 đến n
    • cho j trong phạm vi từ 1 đến m
      • nếu mat [i, 0] =0 và mat [0, j] =0, thì đặt mat [i, j] =0
  • nếu cờ được đặt
    • cho tôi trong phạm vi từ 0 đến n, mat [i, 0]:=0
    • cho tôi trong phạm vi từ 0 đến m, mat [0, i]:=0
  • nếu không thì
    • nếu col được đặt, thì đối với tôi trong phạm vi từ 0 đến n, mat [i, 0]:=0
    • nếu hàng được đặt, thì đối với tôi trong phạm vi từ 0 đến m, mat [0, i]:=0

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

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

Đầu vào

[[1,0,1],[1,1,1],[1,1,1]]

Đầu ra

[[0, 0, 0], [1, 0, 1], [1, 0, 1]]