Leetcode073 矩阵置零(仅使用常量空间的解决方案)(tricky偷鸡懂不懂啊)

地址

https://leetcode-cn.com/problems/set-matrix-zeroes/

描述

在这里插入图片描述
在这里插入图片描述

思想

在这里插入图片描述
在这里插入图片描述

代码

class Solution {
    
    
public:
    void setZeroes(vector<vector<int>>& matrix) {
    
    
        //n行数,m列数
        int n=matrix.size(),m=matrix[0].size();
        int r0=1,c0=1;
        //r0,c0记录下第一行和第一列需不要变为0
        for(int i=0;i<m;i++){
    
    
            if(!matrix[0][i]) r0=0;
        }
        for(int i=0;i<n;i++){
    
    
            if(!matrix[i][0]) c0=0;
        }
        //matrix[0][j],记录第i列要不要置零
        //matrix[i][0],记录第i行要不要置零
        //先枚举哪一行要置零
        for(int i=1;i<n;i++){
    
    
            for(int j=0;j<m;j++){
    
    
                if(!matrix[i][j]){
    
    
                    matrix[i][0]=0;
                }
            }
        }
        for(int i=0;i<n;i++){
    
    
            for(int j=1;j<m;j++){
    
    
                if(!matrix[i][j]){
    
    
                    matrix[0][j]=0;
                }
            }
        }
        //行清零看0列
        for(int i=1;i<n;i++){
    
    
            if(!matrix[i][0]){
    
    
                for(int j=0;j<m;j++){
    
    
                    matrix[i][j]=0;
                }
            }
        }
        //列清零看0行
        for(int i=1;i<m;i++){
    
    
            if(!matrix[0][i]){
    
    
                for(int j=0;j<n;j++){
    
    
                    matrix[j][i]=0;
                }
            }
        }
        //第一行要清零
        if(!r0) {
    
    
            for(int i=0;i<m;i++){
    
    
                matrix[0][i]=0;
            }
        }
        if(!c0){
    
    
            for(int i=0;i<n;i++){
    
    
                matrix[i][0]=0;
            }
        }
    }
};

猜你喜欢

转载自blog.csdn.net/qq_52934831/article/details/121731792
073
今日推荐