0
点赞
收藏
分享

微信扫一扫

LeetCode 73. 矩阵置零*

骨灰级搬砖工 2022-02-15 阅读 34

具体思想:

注意两点:

1.如果采用O(m+n),使用两个vector分别存储行列上的0值,便于把整行整列置0;

2.如果采用O(1),则需要记录第一行第一列是否含0,便于最后把第一行第一列也置为零,但是后续把第一行第一列作为记录数组;

具体代码:

O(1):

class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        bool row_zero=false;
        bool col_zero=false;
        for(int i=0;i<matrix.size();i++){
            if(!matrix[i][0])
                col_zero=true;
        }
        for(int i=0;i<matrix[0].size();i++){
            if(!matrix[0][i])
                row_zero=true;
        }
        for(int i=1;i<matrix.size();i++){
            for(int j=1;j<matrix[0].size();j++){
                if(!matrix[i][j]){
                    matrix[i][0]=0;
                    matrix[0][j]=0;
                }
            }
        }
        for(int i=1;i<matrix.size();i++){
            for(int j=1;j<matrix[0].size();j++){
                if(!matrix[i][0]||!matrix[0][j])
                    matrix[i][j]=0;
            }
        }
        if(row_zero){
            for(int i=0;i<matrix[0].size();i++){
                matrix[0][i]=0;
            }
        }
        if(col_zero){
            for(int i=0;i<matrix.size();i++){
                matrix[i][0]=0;
            }
        }
    }
};

O(m+n):

class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        vector<int>rows(matrix.size());
        vector<int>cols(matrix[0].size());
        for(int i=0;i<matrix.size();i++){
            for(int j=0;j<matrix[0].size();j++){
                if(!matrix[i][j]){
                    rows[i]=1;
                    cols[j]=1;
                }
            }
        }
        for(int i=0;i<rows.size();i++){
            for(int j=0;j<cols.size();j++){
                if(rows[i]==1||cols[j]==1){
                    matrix[i][j]=0;
                }
                
            }
        }
    }
};
举报

相关推荐

0 条评论