73 矩陣置零

2021-10-08 22:38:58 字數 1694 閱讀 5316

題目描述:

給定乙個 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,

4,5,

0],[

0,3,

1,0]

]

高階:

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

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

你能想出乙個常數空間的解決方案嗎?

空間複雜度 o(1) ;

時間複雜度o(mn) ;

用兩個布林變數就可以解決。

1)、布林值為了記錄首行和首列是否要置為全0;

2)、方法就是利用陣列的首行和首列來記錄 0 值。

從陣列下標的 a[1][1] 開始遍歷,

3)、首先按照首行首列中的0,將 其他對應的行和列置為0;

4)、根據布林值然後處理首行首列。

**實現:

class

solution

} boolean colflag =

false

;for

(int i =

0; i < matrix.length; i++)}

for(

int i =

1; i < matrix.length; i++)}

}for

(int i =

1; i < matrix[0]

.length; i++)}

}for

(int i =

1; i < matrix.length; i++)}

}if(rowflag)}if

(colflag)}}

}

解題思路(本人):

空間複雜度 o(m+n) ;

時間複雜度o(mn) ;

1)、使用乙個行的陣列記錄那些行內有0值;

2)、使用乙個列的陣列記錄那些行內有0值;

3)、根據行和列的資訊來將相應的行和列置為0;

**實現:

void

setzeroes

(vectorint>>

& matrix)}}

//根據行和列陣列來置包含0的行和列全為0。

for(

int li : mapline)

for(

int qu : mapque)

}

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 請使用 原地 演算法。高階 乙個直觀的解決方案是使用 o mn 的額外空間,但這並不是乙個好的解決方案。乙個簡單的改進方案是使用 o m n 的額外空間,但這仍然不是最好的解決方案。你能想出乙個僅使用常量空間的解...