矩阵置零C++

给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。

思路:

1、让首行首列记录哪一行哪一列有0

2、于是可以直接遍历非首行首列的元素,若该元素对应的首行首列为0,说明该元素最后还是需要置0

3、由于首行首列还需要记录哪一行哪一列有0,所以第1步和第2步可能会有冲突,于是加入两个bool量,标志首行首列是否有0

cpp 复制代码
class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        int m = matrix.size();  // 行数
        if(m==0)
            return;
        int n = matrix[0].size(); // 列数
        bool row = false, col = false;
        // 先完成标记首行首列是否有0
        // 检查首列是否有0
        for(int i=0; i<m; i++){
            if(matrix[i][0] == 0){
                col = true;
                break;
            }      
        }
        // 检查首行是否有0
        for(int j=0; j<n; j++){
            if(matrix[0][j] == 0){
                row = true;
                break;
            }
        }
        // 完成第一步
        for(int i=1; i<m; i++){
            for(int j=1; j<n; j++){
                if(matrix[i][j] == 0){
                    // 首行首列置0
                    matrix[0][j] = 0;
                    matrix[i][0] = 0;
                }
            }
        }
        // 完成第二步
        for(int i=1; i<m; i++){
            for(int j=1; j<n; j++){
                if(matrix[0][j]==0 || matrix[i][0] == 0){
                    matrix[i][j] = 0;
                }
            }
        }
        // 处理有0的首行首列
        if(col){
            for(int i=0; i<m; i++){
                matrix[i][0] = 0;
            }
        }
        if(row){
            for(int j=0; j<n; j++){
                matrix[0][j] = 0;
            }
        }
    }
};
相关推荐
闪电麦坤9510 分钟前
数据结构:排序算法的评判标准(Criteria Used For Analysing Sorts)
数据结构·算法·排序算法
爱coding的橙子12 分钟前
每日算法刷题Day65:8.27:leetcode dfs11道题,用时2h30min
算法·leetcode·深度优先
不懂机器人21 分钟前
linux网络编程-----TCP服务端并发模型(epoll)
linux·网络·tcp/ip·算法
地平线开发者1 小时前
理想汽车智驾方案介绍 3|MoE+Sparse Attention 高效结构解析
算法·自动驾驶
好学且牛逼的马2 小时前
golang 10指针
开发语言·c++·golang
小O的算法实验室2 小时前
2025年KBS SCI1区TOP,矩阵差分进化算法+移动网络视觉覆盖无人机轨迹优化,深度解析+性能实测
算法·论文复现·智能算法改进
艾莉丝努力练剑3 小时前
【C语言16天强化训练】从基础入门到进阶:Day 11
c语言·学习·算法
Pafey4 小时前
【Deepseek】Windows MFC/Win32 常用核心 API 汇总
c++·windows·mfc
侯杰5 小时前
C++ 线程安全初始化机制详解与实践
c++
浩少7025 小时前
LeetCode-22day:多维动态规划
算法·leetcode·动态规划