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 j trong phạm vi từ 1 đến m
- 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
- cho j trong phạm vi từ 1 đến m
- 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]]