列表

详情


NC352. 矩阵置零

描述

给定一个 的矩阵matrix如果矩阵中任一元素是 0 ,则将其所在行列都设为 0,请你在matrix本身修改,即原地修改

数据范围: , 矩阵中的值都满足

示例1

输入:

[[1,1,1],[1,0,1],[1,1,1]]

输出:

[[1,0,1],[0,0,0],[1,0,1]]

示例2

输入:

[[0,1,0],[1,1,1],[1,1,1],[1,1,1]]

输出:

[[0,0,0],[0,1,0],[0,1,0],[0,1,0]]

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 400ms, 内存消耗: 34028KB, 提交时间: 2022-06-18

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param matrix int整型vector<vector<>> 
     */
    void setZeroMatrix(vector<vector<int> >& matrix) {
        // write code here
        vector<bool> row(matrix.size(),false);
        vector<bool> col(matrix[0].size(),false);
        for(int i=0;i<matrix.size();i++)
            for(int j=0;j<matrix[0].size();j++)
                if(matrix[i][j]==0){
                    row[i]=true;col[j]=true;
                }
        for(int i=0;i<row.size();i++)
            if(row[i]){
                for(int j=0;j<col.size();j++) matrix[i][j]=0;
            }
        for(int j=0;j<col.size();j++)
            if(col[j]){
                for(int i=0;i<row.size();i++) matrix[i][j]=0;
            }
    }
};

C++ 解法, 执行用时: 401ms, 内存消耗: 34128KB, 提交时间: 2022-07-02

class Solution {
  public:
    void setZeroMatrix(vector<vector<int> >& matrix) {
        vector<bool> x(matrix.size(), false);
        vector<bool> y(matrix[0].size(), false);
        
        for (int i = 0; i < matrix.size(); i++)
            for (int j = 0; j < matrix[0].size(); j++)
                if (matrix[i][j] == 0) {
                    x[i] = true;
                    y[j] = true;
                }
        
        for (int i = 0; i < x.size(); i++)
            if (x[i]) {
                for (int j = 0; j < y.size(); j++) matrix[i][j] = 0;
            }
        
        for (int j = 0; j < y.size(); j++)
            if (y[j]) {
                for (int i = 0; i < x.size(); i++) matrix[i][j] = 0;
            }
    }
};

C++ 解法, 执行用时: 404ms, 内存消耗: 34128KB, 提交时间: 2022-05-21

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param matrix int整型vector<vector<>> 
     */
    void setZeroMatrix(vector<vector<int> >& w) {
        int n = w.size(), m = w[0].size();
        vector<bool> x(n), y(m);
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < m; ++j) {
                if (w[i][j] == 0) x[i] = y[j] = 1;
            }
        }
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < m; ++j) {
                if (x[i] || y[j]) w[i][j] = 0;
            }
        }
    }
};

C++ 解法, 执行用时: 404ms, 内存消耗: 34128KB, 提交时间: 2022-03-10

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param matrix int整型vector<vector<>> 
     */
    void setZeroMatrix(vector<vector<int> >& matrix) {
        int i,j,m=matrix.size(),n=matrix[0].size();
        bool isfirst=false;
        for(i=0;i<m;i++)
        {
            isfirst=isfirst||(matrix[i][0]==TARGET);
            for(j=1;j<n;j++)
            {
                if(matrix[i][j]==TARGET)
                    matrix[i][0]=matrix[0][j]=TARGET;
            }
        }
        for(i=m-1;i>=0;i--)
        {
            for(j=1;j<n;j++)
            {
                if((matrix[i][0]==TARGET)||(matrix[0][j]==TARGET))
                    matrix[i][j]=TARGET;
            }
            if(isfirst)
                matrix[i][0]=TARGET;
        }
    }
private:
    const int TARGET=0;
};

C++ 解法, 执行用时: 407ms, 内存消耗: 34128KB, 提交时间: 2022-03-10

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param matrix int整型vector<vector<>> 
     */
    void setZeroMatrix(vector<vector<int> >& matrix) {
        // write code here
        int m = matrix.size();
        int n = matrix[0].size();
        int flag_col0 = false;
        for (int i = 0; i < m; i++) {
            if (!matrix[i][0]) {
                flag_col0 = true;
            }
            for (int j = 1; j < n; j++) {
                if (!matrix[i][j]) {
                    matrix[i][0] = matrix[0][j] = 0;
                }
            }
        }
        for (int i = m - 1; i >= 0; i--) {
            for (int j = 1; j < n; j++) {
                if (!matrix[i][0] || !matrix[0][j]) {
                    matrix[i][j] = 0;
                }
            }
            if (flag_col0) {
                matrix[i][0] = 0;
            }
        }
    }
};

上一题