矩阵置零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;
            }
        }
    }
};
相关推荐
lzllzz2315 分钟前
bellman_ford算法
算法
栈与堆26 分钟前
LeetCode 19 - 删除链表的倒数第N个节点
java·开发语言·数据结构·python·算法·leetcode·链表
sunfove27 分钟前
麦克斯韦方程组 (Maxwell‘s Equations) 的完整推导
线性代数·算法·矩阵
txinyu的博客32 分钟前
结合游戏场景理解,互斥锁,读写锁,自旋锁,CAS / 原子变量,分段锁
开发语言·c++·游戏
Rui_Freely35 分钟前
Vins-Fusion之 SFM准备篇(十二)
人工智能·算法·计算机视觉
hugerat37 分钟前
在AI的帮助下,用C++构造微型http server
linux·c++·人工智能·http·嵌入式·嵌入式linux
-森屿安年-43 分钟前
unordered_map 和 unordered_set 的实现
数据结构·c++·散列表
yyy(十一月限定版)1 小时前
matlab矩阵的操作
算法·matlab·矩阵
九久。1 小时前
手动实现std:iterator/std:string/std::vector/std::list/std::map/std:set
c++·stl
小羊羊Python1 小时前
Sound Maze - 基于 SFML+C++14 的音效迷宫开源游戏 | MIT 协议
c++·游戏·开源