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;
        }
    }

};

 

 

 

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