73 矩陣置零

2021-10-22 18:57:47 字數 1610 閱讀 9322

給定乙個 m x n 的矩陣,如果乙個元素為 0 ,則將其所在行和列的所有元素都設為 0 。請使用 原地 演算法。

高階:乙個直觀的解決方案是使用 o(mn) 的額外空間,但這並不是乙個好的解決方案。

乙個簡單的改進方案是使用 o(m + n) 的額外空間,但這仍然不是最好的解決方案。

你能想出乙個僅使用常量空間的解決方案嗎?

示例 1:

輸入:matrix = [[1,1,1],[1,0,1],[1,1,1]]

輸出:[[1,0,1],[0,0,0],[1,0,1]]

示例 2:

輸入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]

輸出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]

題解:遍歷矩陣,遇到值為0的元素就將所在行列不為0的元素打個標記,然後再次遍歷將標記元素置0即可 ps: python這種比較好處理,但是c語言這種就不能用這個辦法了,因為矩陣值是任意的沒法找到用於標記的值(中文的題目描述比較坑沒說明取值範圍,切換到英文可以看到取值範圍涵蓋了整個int型別的取值範圍)

class

solution

:def

setzeroes

(self, matrix: list[list[

int]])

->

none

:"""

do not return anything, modify matrix in-place instead.

"""row =

len(matrix)

col =

len(matrix[0]

)if row >

0else

0for i in

range

(row)

:for j in

range

(col):if

(matrix[i]

[j]==0)

:for k in

range

(row):if

(matrix[k]

[j]!=0)

: matrix[k]

[j]=

"#"for k in

range

(col):if

(matrix[i]

[k]!=0)

: matrix[i]

[k]=

"#"for i in

range

(row)

:for j in

range

(col):if

(matrix[i]

[j]==

"#")

: matrix[i]

[j]=

0

73 矩陣置零

方法1 賦值另存乙個m n的矩陣,在原矩陣為零的值相應置新的矩陣行和列為零。額外空間為o m n o m n o m n 方法2 兩個陣列,bool m 和 bool n 分別存某行有零,後者某列有零。之後根據陣列值將原矩陣相應位置置零。額外空間o m n o m n o m n 方法3 看來許久才...

73 矩陣置零

題目.middle 要想不使用額外空間,那麼就需要將標誌位設在原來的資料上面,這裡就把第一行和第一列用來儲存改行或者該列是否有0 的標誌,這樣原來是否是0就被覆蓋了,所以需要兩個標誌記錄下來 package main import fmt func setzeroes matrix int rows...

73 矩陣置零

題目描述 給定乙個 m x n 的矩陣,如果乙個元素為 0,則將其所在行和列的所有元素都設為 0。請使用原地演算法。示例 1 輸入 1,1,1 1,0,1 1,1,1 輸出 1,0,1 0,0,0 1,0,1 示例 2 輸入 0,1,2,0 3,4,5,2 1,3,1,5 輸出 0,0,0,0 0,...