Leetcode 73矩陣置零 遍歷模擬題目

最直接做法:拷貝一份數組,使用O(M*N)的輔助空間

記錄下要置零的行和列,使用O(M+N)的輔助空間。

原地做法:用兩個變量記錄第一行和第一列的情況,用第一行和第一列來充當記錄角色

class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        int n = matrix.size(), m = matrix[0].size();
        int row0 = 0, col0 = 0;
        for(int i=0;i<n;i++) if(matrix[i][0]==0) col0 = 1;
        for(int i=0;i<m;i++) if(matrix[0][i]==0) row0 = 1;

        // 看每一行
        for(int i=1;i<n;i++){
            for(int j=0;j<m;j++){
                if(matrix[i][j]==0) matrix[i][0] = 0;
            }
        }

        // 看每一列
        for(int j=1;j<m;j++){
            for(int i=0;i<n;i++){
                if(matrix[i][j]==0) matrix[0][j] = 0;
            }
        }

        // 清理每一行
        for(int i=1;i<n;i++){
            if(matrix[i][0]==0){
                for(int j=0;j<m;j++) matrix[i][j] = 0;
            }
        }

        // 清理每一列
        for(int j=1;j<m;j++){
            if(matrix[0][j]==0){
                for(int i=0;i<n;i++) matrix[i][j] = 0;
            }
        }

        if(row0) {
            for(int i=0;i<m;i++) matrix[0][i] = 0;
        }

        if(col0){
            for(int i=0;i<n;i++) matrix[i][0] = 0;
        }
    }

};

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章