Python 中將矩陣置零
假設我們有一個矩陣,如果矩陣中的一個元素為 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
- 對於 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
- 對於 j 的範圍從 1 到 m
- 對於 i 的範圍從 1 到 n
- 對於 j 的範圍從 1 到 m
- 如果 mat[i, 0] = 0 且 mat[0, j] = 0,則設定 mat[i, j] = 0
- 對於 j 的範圍從 1 到 m
- 如果設定了標誌
- 對於 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]]
廣告