LeetCode Day58 set matrix zeroes

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

不需要第一列和第一行都判断,只需要第一列或者第一行
此时由于第一行作仍作为基准列,但在遍历的范围内,最后置零时要按照列倒序,行可以顺序也可以逆序。防止按照列顺序,第一行都被置零,所有列由于第一行为零都要置零。

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

猜你喜欢

转载自blog.csdn.net/weixin_41394379/article/details/85222357
今日推荐