LeetCode 刷题【73. 矩阵置零】

73. 矩阵置零

自己做

解:标记消除

cpp 复制代码
class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        vector<bool> x(matrix.size(), false);              //要置0的行
        vector<bool> y(matrix[0].size(), false);           //要置0的列
              
        //找出所有0元素
        for(int i = 0; i < (int)matrix.size(); i++)
            for(int j = 0; j < (int)matrix[0].size(); j++)
                if(matrix[i][j] == 0){
                    x[i] = true;        //该行要置0
                    y[j] = true;        //该列要置0
                }

        //置空行   
        for(int i = 0; i < (int)matrix.size(); i++)
            if(x[i])                   //该行需要置0
                for(int j = 0; j < (int)matrix[0].size(); j++)
                    matrix[i][j] = 0;
            
        
        
        //置空列
        for(int j = 0; j < (int)matrix[0].size(); j++)        
            if(y[j])                   //该列需要置0
                for(int i = 0; i < (int)matrix.size(); i++)
                    matrix[i][j] = 0;
                        
    }
};

看题解

解:利用已有空间保存数据

官方代码:

cpp 复制代码
class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        int m = matrix.size();
        int n = matrix[0].size();
        int flag_col0 = false, flag_row0 = false;
        for (int i = 0; i < m; i++) {
            if (!matrix[i][0]) {
                flag_col0 = true;
            }
        }
        for (int j = 0; j < n; j++) {
            if (!matrix[0][j]) {
                flag_row0 = true;
            }
        }
        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                if (!matrix[i][j]) {
                    matrix[i][0] = matrix[0][j] = 0;
                }
            }
        }
        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                if (!matrix[i][0] || !matrix[0][j]) {
                    matrix[i][j] = 0;
                }
            }
        }
        if (flag_col0) {
            for (int i = 0; i < m; i++) {
                matrix[i][0] = 0;
            }
        }
        if (flag_row0) {
            for (int j = 0; j < n; j++) {
                matrix[0][j] = 0;
            }
        }
    }
};
相关推荐
芒果量化7 分钟前
ML4T - 第7章第8节 利用LR预测股票价格走势Predicting stock price moves with Logistic Regression
算法·机器学习·线性回归
东方芷兰21 分钟前
JavaWeb 课堂笔记 —— 20 SpringBootWeb案例 配置文件
java·开发语言·笔记·算法·log4j·intellij-idea·lua
Diligence8151 小时前
最优化方法
算法
会编程是什么感觉...1 小时前
算法 - FOC闭环位置控制
算法·foc
半桔1 小时前
【STL源码剖析】从源码看 list:从迭代器到算法
java·数据结构·c++·算法·stl·list
轩源源1 小时前
双向链表,这也太简单了吧!(C语言实现)
c语言·数据结构·算法·链表·青少年编程
vortex52 小时前
HTB Mailing 靶机渗透记录:利用 CVE-2024-21413 捕获 NTLM Hash
算法·哈希算法
王哥儿聊AI3 小时前
告别人工出题!PromptCoT 2.0 让大模型自己造训练难题,7B 模型仅用合成数据碾压人工数据集效果!
人工智能·深度学习·算法·机器学习·软件工程
机器学习之心4 小时前
198种组合算法+优化BiGRU双向门控循环单元+SHAP分析+新数据预测+多输出!深度学习可解释分析,强烈安利,粉丝必备!
深度学习·算法·shap分析·新数据预测·优化bigru
小胖xiaopangss4 小时前
栈的压入弹出序列--牛客
数据结构·c++·算法