一天一道LeetCode

本系列文章已全部上传至我的github,地址:ZeeCoder‘s Github

欢迎大家关注我的新浪微博,我的新浪微博

欢迎转载,转载请注明出处

(一)题目

Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.

(二)解题

题目大意:给定一个M*N的数组,如果(i,j)为0,则将第i行第j列全部元素置为0。

这道题目意思很简单,如果考虑到用辅助空间来计算就超级简单了,本题不允许用辅助空间!

那么,我们换个思路,利用矩阵自身来存储需要修改的信息。

这里我们考虑将需要修改的行列信息存储在第0行和第0列。具体见代码:

class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        int row = matrix.size();
        if(row==0) return;
        int col = matrix[0].size();
        int R0flag = false;//记录第0行是否存在0
        int C0flag = false;//记录第0列是否存在0
        for(int i = 0 ; i< row ; i++)
        {
            if(matrix[i][0]==0) {C0flag=true;break;}//扫描第0列
        }
        for(int i = 0 ; i< col ; i++)
        {
            if(matrix[0][i]==0) {R0flag=true;break;}//扫描第0行
        }
        //扫描整个数组,用matrix[i][0]保存需要修改的列, matrix[0][j]保存需要修改的行
        for(int i = 0 ; i < row ;i++)
        {
            for(int j = 0 ; j < col ; j++)
            {
                if(matrix[i][j] == 0)
                {
                    matrix[i][0] = 0;
                    matrix[0][j] = 0;
                }
            }
        }
        //修改1~col-1列
        for(int i = 1 ; i< row ; i++)
        {
            if(matrix[i][0]==0){
                for(int j = 0 ; j< col ; j++)
                {
                    matrix[i][j]=0;
                }
            }
        }
        //修改1~row-1行
        for(int i = 1 ; i< col ; i++)
        {
            if(matrix[0][i]==0){
                for(int j = 0 ; j< row ; j++)
                {
                    matrix[j][i]=0;
                }
            }
        }
        //修改第0行和第0列
        if(R0flag){
            for(int i = 0 ; i < col ; i++) matrix[0][i] =0;
        }
        if(C0flag){
            for(int i = 0 ; i < row ; i++) matrix[i][0] =0;
        }
    }
};

【一天一道LeetCode】#73. Set Matrix Zeroes的更多相关文章

  1. [LeetCode] 73. Set Matrix Zeroes 矩阵赋零

    Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in-place. Exampl ...

  2. Leetcode#73 Set Matrix Zeroes

    原题地址 用矩形的第一行和第一列充当mask 代码: void setZeroes(vector<vector<int> > &matrix) { ].empty()) ...

  3. [LeetCode] 73. Set Matrix Zeroes 解题思路

    Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. Follow ...

  4. leetcode[73] Set Matrix Zeroes 将矩阵置零

    给定一个矩阵,把零值所在的行和列都置为零.例如: 1 2 3 1 3 1 1 1 操作之后变为 1 3 0 0 0 1 1 方法1: 赋值另存一个m*n的矩阵,在原矩阵为零的值相应置新的矩阵行和列为零 ...

  5. 【LeetCode】73. Set Matrix Zeroes (2 solutions)

    Set Matrix Zeroes Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do i ...

  6. 【LeetCode】-- 73. Set Matrix Zeroes

    问题描述:将二维数组中值为0的元素,所在行或者列全set为0:https://leetcode.com/problems/set-matrix-zeroes/ 问题分析:题中要求用 constant ...

  7. 【LeetCode】73. Set Matrix Zeroes 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 原地操作 新建数组 队列 日期 题目地址:https ...

  8. LeetCode OJ 73. Set Matrix Zeroes

    Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. click ...

  9. 【LeetCode】73. Set Matrix Zeroes

    题目: Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. Fo ...

随机推荐

  1. aways on 配置部署(一)——准备工作

    sqlserver的aways on 配置需要经历三个步骤,前面两个步骤是对aways on 配置的一个准备步骤. 经过了一个星期的研究,终于成功的完成了前两个步骤,期间参考了很多的资料和博客,总感觉 ...

  2. 学习ASP.NET Core Razor 编程系列七——修改列表页面

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  3. python学习之路前端-JavaScript

    JavaScript简介 JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本 ...

  4. 关于基因组注释文件GTF的解释

    GTF文件的全称是gene transfer format,主要是对染色体上的基因进行标注.怎么理解呢,其实所谓的基因名,基因座等,都只是后来人们给一段DNA序列起的名字而已,还原到细胞中就是细胞核里 ...

  5. Linux设置文件读写权限

    设置文件夹的读写权限: sudo chmod -R 777 /data 权限码描述 sudo chmod 600 ××× (只有所有者有读和写的权限)sudo chmod 644 ××× (所有者有读 ...

  6. django模板语言中的extends,block和include

    extends和block一起用 它们用于母版和子版的继承 在母版html中将一些需要替换的部分用{% block xxx %}...{% endblock %}括起来, 在子版html中,在第一行需 ...

  7. 实体类双向映射进行Json序列化时出现无限循环的解决问题

    1.@JsonIgnoreProperties 指定的字段不会被序列化,如下则ExamPaper的directory字段不会被序列化 @OneToMany(mappedBy = "direc ...

  8. NavigationView使用过程的问题解决

    NavigationView是android support design库提供的侧滑面板控件,通常与support v4库里的DrawerLayout侧滑控件搭配使用.以下是使用过程中遇到的问题及解 ...

  9. 2.cocos2dx 3.2中语法的不同之处,lambada表达式的使用和function和bind函数的使用

    1        打开建好的T32  Cocos2dx-3.2的一个项目 2        设置Cocos显示窗口的位置是在AppDelegate.cpp中: 3  设置自适应窗口大小的代码是在上面的 ...

  10. 一个都不能少: DevOps的3大核心基础架构

    DevOps的涵盖面非常广,因为这个概念的火热,又有很多文章和技术都在把DevOps的帽子扣在自己头上,让很多人迷惑不解.其实,DevOps的知识体系如果从顶层上来分解,只有2块:方法论和工具链.方法 ...