题目:

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

分析:

题意很简单,就是把为0的元素所在的行和列都置0;

首先不能直接边循环边做,这样会造成很多本来不是0的元素被置0之后,在后续判断中将它的行列也置0;

所以简单的方法是建立两个数组,存行和列是否为0的情况,遍历一遍更新两个数组,再遍历一遍把应该置0的全部置0。

自己写的时候先考虑用了个set便于不记录重复的下标,所以有如下代码1:

  1. class Solution {
  2. public:
  3. void setZeroes(vector<vector<int>>& matrix) {
  4. set<int> rowflag;
  5. set<int> colomnflag;
  6. for (int i = ; i < matrix.size(); ++i) {
  7. for (int j = ; j < matrix[].size(); ++j) {
  8. if (matrix[i][j] == ) {
  9. rowflag.insert(i);
  10. colomnflag.insert(j);
  11. }
  12. }
  13. }
  14. for (auto i : rowflag) {
  15. for (int j = ; j < matrix[].size(); ++j) {
  16. matrix[i][j] = ;
  17. }
  18. }
  19. for (auto i : colomnflag) {
  20. for (int j = ; j < matrix.size(); ++j) {
  21. matrix[j][i] = ;
  22. }
  23. }
  24. return;
  25. }
  26. };

程序还算简洁,记录最坏情况那里空间复杂度是为的O(nlogn + mlogm);

记录bool数组的方式,自己开始觉得写起来不够简洁。

后来看了讨论区大家的写法,发现第二次的用循环一遍,然后rowflag[i] || colonmnflag[j]可以很简洁的写出来,所以有如下代码2:

  1. class Solution {
  2. public:
  3. void setZeroes(vector<vector<int>>& matrix) {
  4. int rowflag[matrix.size()] = {};
  5. int colomnflag[matrix[].size()] = {};
  6. for (int i = ; i < matrix.size(); ++i) {
  7. for (int j = ; j < matrix[].size(); ++j) {
  8. if (matrix[i][j] == ) {
  9. rowflag[i] = ;
  10. colomnflag[j] = ;
  11. }
  12. }
  13. }
  14. for (int i = ; i < matrix.size(); ++i) {
  15. for (int j = ; j < matrix[].size(); ++j) {
  16. if (rowflag[i] == || colomnflag[j] == ) {
  17. matrix[i][j] = ;
  18. }
  19. }
  20. }
  21. return;
  22. }
  23. };

题目的follow-up中问道能否用常数的空间解决该问题,做法就是用两个变量记录第一行和第一列是否有0,

然后用第一行和第一列充当rowflag,colomnflag即可。

LeetCode73 Set Matrix Zeroes的更多相关文章

  1. Leetcode73. Set Matrix Zeroes矩阵置零

    给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0.请使用原地算法. 示例 1: 输入: [   [1,1,1],   [1,0,1],   [1,1,1] ] 输 ...

  2. 55. Set Matrix Zeroes

    Set Matrix Zeroes (Link: https://oj.leetcode.com/problems/set-matrix-zeroes/) Given a m x n matrix, ...

  3. [CareerCup] 1.7 Set Matrix Zeroes 矩阵赋零

    1.7 Write an algorithm such that if an element in an MxN matrix is 0, its entire row and column are ...

  4. Leetcode 细节实现 Set Matrix Zeroes

    Set Matrix Zeroes Total Accepted: 18139 Total Submissions: 58671My Submissions Given a m x n matrix, ...

  5. LeetCode: Set Matrix Zeroes 解题报告

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

  6. 【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 ...

  7. LeetCode解题报告—— Rotate List & Set Matrix Zeroes & Sort Colors

    1. Rotate List Given a list, rotate the list to the right by k places, where k is non-negative. Exam ...

  8. [Swift]LeetCode73. 矩阵置零 | 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 ...

  9. 【leetcode】Set Matrix Zeroes(middle)

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

随机推荐

  1. [转]js设计模式—发布订阅模式

    发布—订阅模式又叫观察者模式,它定义对象间的一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知.在javascript开发中,一般用事件模型来替代传统的发布—订阅模式.本文将 ...

  2. 读书笔记--Head First Networking目录

    1.解决物理网络 2.规划网络布局 3.工具和故障排除 4.包分析 5.网络设备和流量 6.连接网络的路由器 7.路由协议 8.域名系统 9.监控和故障排除 10.无线网络 11.网络安全 12.网络 ...

  3. JDBC 操作数据库实例

    JDBC是什么 JDBC代表Java数据库连接(Java Database Connectivity),它是用于Java编程语言和数据库之间的数据库无关连接的标准Java API,换句话说:JDBC是 ...

  4. 基于python爬虫的github-exploitdb漏洞库监控与下载

    基于python爬虫的github-exploitdb漏洞库监控与下载 offensive.py(爬取项目历史更新内容) #!/usr/bin/env python # -*- coding:utf- ...

  5. win10 下安装 neo4j

    1.neo4j介绍 neo4j是基于Java语言编写图形数据库.图是一组节点和连接这些节点的关系.图形数据库也被称为图形数据库管理系统或GDBMS.详细介绍可看Neo4j 教程 2.安装Java jd ...

  6. 洛谷P3459 [POI2007]MEG-Megalopolis [2017年6月计划 树上问题02]

    [POI2007]MEG-Megalopolis 题目描述 Byteotia has been eventually touched by globalisation, and so has Byte ...

  7. ML面试1000题系列(81-90)

    本文总结ML面试常见的问题集 转载来源:https://blog.csdn.net/v_july_v/article/details/78121924 81.已知一组数据的协方差矩阵P,下面关于主分量 ...

  8. ip地址获取无效,自己修改ip地址

    (1)

  9. python第一天 :计算机基础(一)

    1.什么是编程语言 答:人类与计算机交流的介质 2.什么是编程 答:利用编程语言控制计算机解决问题 3.为什么要编程 答:可以控制计算机做事,提高生产生活效率 4.计算机的五大组成部分分别有什么作用? ...

  10. oralce默认语言

    默认语言设置可以确定数据库如何支持与区域设置相关的信息,例如: 日和月份的名称及其缩写 A.M..P.M..A.D. 和 B.C. 的等价表示方法的符号 指定 ORDER BY SQL 子句时字符数据 ...