leetcode-矩陣置零

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

示例 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]]

提示:

m == matrix.length
n == matrix[0].length
1 <= m, n <= 200
-231 <= matrix[i][j] <= 231 - 1

題目描述:給定一個m x n的矩陣,如果一個元素為0,則將其所在的行和列的所有元素都設(shè)為0。

思路:使用兩個數(shù)組記錄哪些行和哪些列需要置零,遍歷整個矩陣,當(dāng)遍歷到matrix[i][j]為0時,將row[i]和col[j]置為true。再次遍歷整個矩陣,當(dāng)matrix[i][j]所在的行或列已被標(biāo)記時,將其置為0。

解決這道題需要以下知識儲備:

1.二維數(shù)組的定義和操作;
2.遍歷二維數(shù)組的方法;
3.布爾數(shù)組的定義和使用;
4.嵌套循環(huán)的使用;
5.時間復(fù)雜度和空間復(fù)雜度的概念。

代碼實現(xiàn):

class Solution {
    public void setZeroes(int[][] matrix) {
        int m = matrix.length;
        int n = matrix[0].length;
        boolean[] row = new boolean[m];
        boolean[] col = new boolean[n];
        for(int i=0; i<m; i++){
            for(int j=0; j<n; j++){
                if(matrix[i][j] == 0){
                    row[i] = true;
                    col[j] = true;
                }
            }
        }
        for(int i=0; i<m; i++){
            for(int j=0; j<n; j++){
                if(row[i] || col[j]){
                    matrix[i][j] = 0;
                }
            }
        }
    }
}

????這道題的思路比較簡單,就是先遍歷整個矩陣,將所有為0的元素所在的行和列標(biāo)記為需要置為0的行和列,然后再次遍歷整個矩陣,將需要置為0的行和列中的元素全部置為0。

????具體實現(xiàn)時,可以使用兩個boolean數(shù)組row和col,分別記錄哪些行和哪些列需要置為0。首先遍歷整個矩陣,當(dāng)遍歷到matrix[i][j]為0時,將row[i]和col[j]置為true。然后再次遍歷整個矩陣,當(dāng)matrix[i][j]所在的行或列已被標(biāo)記時,將其置為0即可。

  • 時間復(fù)雜度為
    O(m*n)
  • 空間復(fù)雜度為
    O(m+n)
    其中m和n分別為矩陣的行數(shù)和列數(shù)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容