题目描述

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

示例 1:

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

示例 2:

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

进阶:

  • 一个直接的解决方案是使用  O(mn) 的额外空间,但这并不是一个好的解决方案。
  • 一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。
  • 你能想出一个常数空间的解决方案吗?

解题思路

考虑用第一行和第一列记录每一行每一列是否出现过0,这样就需要额外记录第一列是否出现过0.具体来说对于第一列的元素首先记录是否出现过0,然后从第一行开始遍历每个元素,若为0就置其所在的行列首元素为0。然后置0时为了避免第一行元素被全部置0而造成混淆,所以从最后一行开始向上遍历,对于除第一列外的每个元素判断其行列首元素是否为0考虑是否置0,然后再判断第一列是否需要置0.

代码

 class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
int c0 = ;
for(int i = ; i < matrix.size(); i++){
if(matrix[i][] == ) c0 = ;
for(int j = ; j < matrix[i].size(); j++)
if(matrix[i][j] == )
matrix[i][] = matrix[][j] = ;
}
for(int i = matrix.size() - ; i >= ; i--){
for(int j = ; j < matrix[i].size(); j++)
if(matrix[i][] == || matrix[][j] == )
matrix[i][j] = ;
if(c0 == ) matrix[i][] = ;
}
}
};

LeetCode 73. 矩阵置零(Set Matrix Zeroes)的更多相关文章

  1. Java实现 LeetCode 73 矩阵置零

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

  2. leetcode 73 矩阵置零 Python

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

  3. [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 ...

  4. LeetCode:矩阵置零【73】

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

  5. leetcode.矩阵.73矩阵置零-Java

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

  6. leetcode刷题-73矩阵置零

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

  7. 73. 矩阵置零 leetcode JAVA

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

  8. 【python】Leetcode每日一题-矩阵置零

    [python]Leetcode每日一题-矩阵置零 [题目描述] 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 .请使用 原地 算法. 进阶: 一个直观的解 ...

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

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

随机推荐

  1. 转:Git和Github简单教程

    转自:https://www.cnblogs.com/schaepher/p/5561193.html Git和Github简单教程   原文链接:Git和Github简单教程 网络上关于Git和Gi ...

  2. 微信小程序iOS下拉白屏晃动,坑坑坑

    感觉ios的小程序每个页面都可以下拉出现白屏 有时页面带有滑动的属性会跟着晃动,体验不是很好 解决办法: 先禁止页面下拉 <config> { navigationBarTitleText ...

  3. JQuery 判断复选框是否选中

    $("input").attr("checked") == "checked" or "undefined" $(&qu ...

  4. Swift 函数式数据结构 - 链表

    本文将使用Swift实现一个标准链表,在实现的过程中,遵守函数式编程的规则,无副作用,可以看到和C语言的实现还是有较大的差异. 预备知识 enum 的各种用法 swift的基本的模式匹配( patte ...

  5. 第十二章·Kibana深入-日志图形展示

    1.Kibana创建区域图 Kibana支持多重图从展示功能,需要日志是json格式的支持. Kibana区域图 打开浏览器,访问:http://10.0.0.54:5601   选择一个日志  ...

  6. itertools:处理可迭代对象的模块

    合并和分解迭代器 chain chain可以接收多个可迭代对象(或者迭代器)作为参数,最后返回一个迭代器. 它会生成所有输入迭代器的内容,就好像这些内容来自一个迭代器一样. 类似于collection ...

  7. Linux工具之vmstat

    vmstat   (virtual   memory   statistics,虚拟内存统计)的缩写.可以对操作系统的虚拟内存.进程.CPU活动进行监控.     1.命令格式 vmstat [-a] ...

  8. Linux工具之sar

    1.sar简介 sar(System Activity Reporter 系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告, 包括:文件的读写情 ...

  9. js抽奖,跑马灯

    分享自己写的跑马灯抽奖. HTML代码 <!--首先将一个div的背景设为一个圆形--> <div style=" width:240px; height:232px; b ...

  10. 网络资源url转化为file对象下载文件

    注:只测试过网络图片资源. 一.使用org.apache.commons.io.FileUtils 二. 三.httpURLConnection.disconnect(); 四. import org ...