LeetCode 73、矩阵置零

news/2024/7/23 19:25:37

73、矩阵置零

1)题目分析

给定一个 *m* x *n* 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0

示例 1:

img

输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[1,0,1],[0,0,0],[1,0,1]]

示例 2:

img

输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]

提示:

  • m == matrix.length
  • n == matrix[0].length
  • 1 <= m, n <= 200
  • -2^31 <= matrix[i][j] <= 2^31 - 1

2)分析

  • 用两个变量来标记第一行和第一列是否有零;
  • 用第一行来标记每一列是否有零;
  • 用第一列来标记每一行是否有零;
  • 用第一行和第一列来更新矩阵;
  • 用两个标记变量来更新第一行和第一列。

3)C++代码

class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        int row=matrix.size();
        int col=matrix[0].size();

        bool col_0=false;
        bool row_0=false;

        //判断第一列是否有零
        for(int i=0;i<row;i++){
            if(!matrix[i][0]){
                col_0=true;
                break;
            }
        }
        //判断第一行是否有零
        for(int i=0;i<col;i++){
            if(!matrix[0][i]){
                row_0=true;
                break;
            }
        }

        //使用第一行第一列来进行记录每一行每一列是否有零
        for(int i=1;i<row;i++){
            for(int j=1;j<col;j++){
                if(!matrix[i][j]){
                    matrix[i][0]=0;
                    matrix[0][j]=0;
                }
            }
        }

        //使用第一行第一列来更新矩阵
        for(int i=1;i<row;i++){
            for(int j=1;j<col;j++){
                if(!matrix[i][0]||!matrix[0][j])
                    matrix[i][j]=0;
            }
        }

        //使用col_0和row_0来更新第一行和第一列
        if(col_0){
            for(int i=0;i<row;i++)
                matrix[i][0]=0;
        }
        if(row_0){
            for(int i=0;i<col;i++)
                matrix[0][i]=0;
        }
    }
};

http://www.niftyadmin.cn/n/3573257.html

相关文章

php关闭按钮,javascript – 在div中添加关闭按钮关闭框

最简单的方式(假设你想删除元素)x添加到你的div&#xff0c;一个example here。你也可以使用这样的东西window.onload function(){document.getElementById(close).onclick function(){this.parentNode.parentNode.parentNode.removeChild(this.parentNode.parentNode);retur…

计算机考研试卷结构,历年计算机考研试卷结构与难度分析

原标题&#xff1a;历年计算机考研试卷结构与难度分析1.历年计算机统考的试卷结构分析计算机考研专业课在2009年实行了第一次统考&#xff0c;统考科目包括四门计算机专业课&#xff1a;数据结构、计算机组成原理、操作系统和计算机网络&#xff0c;这四门课程合在一起称为计算…

F5 任命 Ben Gibson 担任首席营销官

全球应用网络与安全领导者 F5 Networks(NASDAQ:FFIV) 宣布&#xff0c;将任命 Ben Gibson 为公司首席营销官兼执行副总裁&#xff0c;直接向首席执行官汇报工作。Gibson 将负责监管公司的全球营销战略&#xff0c;推动 F5 进一步拓展在应用安全与云应用部署领域的业务发展。Gib…

你应该知道的jQuery的小技巧

为什么80%的码农都做不了架构师&#xff1f;>>> 本文为翻译文章&#xff0c;原文在jquery-tips-everyone-should-know 回到顶部的按钮 通过使用jQuery中的animate 与 scrollTop 方法可以创建一个非常简易的带有平滑滚动的回到顶部的按钮&#xff1a; // Back to to…

23.07.09

完善对话框功能 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);// this->setWindowOpacity(0); } Widget::~Widget() {delete ui; } //字体对应的槽 voi…

Java1.8接口方法都是抽象_JDK1.8 中 接口和抽象类的异同

在最新版本Java1.8中的变化里&#xff0c; Stephen Colebourne 告诉Hartmut Schlosser&#xff0c;“我认为最重要的语言上的改变不是Lambdas表达式&#xff0c;而是在接口上的静态和默认方法”。ColeBoune补充道&#xff0c;“默认方法功能的增加减少了许多使用抽象类的原因”…

getstudent.php代码,基于Codeigniter框架实现的student信息系统站点动态发布功能详解...

本文实例讲述了基于codeigniter框架实现的student信息系统站点动态发布功能。分享给大家供大家参考&#xff0c;具体如下&#xff1a;既然是动态站点&#xff0c;肯定有数据库表的存在&#xff0c;在此不废话&#xff0c;下面我们来看一下数据库表&#xff1a;create table if …

通信专业计算机网络考试试卷,《计算机网络》考试试卷(A卷)_通信0501-03_20080526.doc...

《计算机网络》考试试卷(A卷)_通信0501-03_20080526湖南工业大学考试试卷纸系 院 课程名称 班级 姓名 学号 密封线课程名称: 计算机网络 (A卷 闭卷)适用专业年级 : 通信2005级 考试时间 100分钟题号一二三四五六七八九十总分统分人 签名题分3020201020 100得分 考生注意事项&am…