[LeetCode]SetMatrix Zero
题目说明
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
Follow up:
Did you use extra space?
A straight forward solution using O(mn) space is probably a bad idea.
A simple improvement uses O(m + n) space, but still not
the best solution.
Could you devise a constant space solution?
思路
此题要解决很简单,关键是空间限制。最笨的办法是另外开辟一个mn的矩阵记录每个元素是否应该变成0,最后遍历原矩阵将相应元素改成0.其次一点的办法是用两个hashset记录应该变为0的行和列。最后修改原矩阵。
这两种方法都很好实现,这里就不赘述了,要如何用常数量的空间解决这个问题呢?
如果直接修改矩阵元素的话该元素原来的信息就丢失了,因此思路是用两个布尔变量记录第一行和第一列是否有0,然后用第一行和第一列里的元素记录对应行列是否应该变为0。举例来说,第j列如果含0,就将对应的第一行matrix[0][j]设为0(这个元素最后必然要变成0,而他本身的值对第一行的影响已经记录了,因此这里修改他不会影响最后的结果)。第i行如果含0,就将第一列matrix[i][0]设为0。这样最后其余所有(n-1)行(m-1)列是否含0的信息都记录在对应第一行,第一列元素里。而第一行,第一列初始是否含0则记录在之前提到的两个布尔值了。
代码
if(matrix.length==0)
return;
int n=matrix.length;
int m=matrix[0].length;
boolean firstRow=false;
boolean firstCol=false;
for(int i=0;i<n;i++)
{
if(matrix[i][0]==0)
{
firstCol=true;
break;
}
}
for(int i=0;i<m;i++)
{
if(matrix[0][i]==0)
{
firstRow=true;
break;
}
}
for(int i=1;i<n;i++)
{
for(int j=1;j<m;j++)
{
if(matrix[i][j]==0)
{
matrix[i][0]=0;
matrix[0][j]=0;
}
}
}
for(int i=1;i<n;i++)
{
if(matrix[i][0]==0)
{
for(int j=1;j<m;j++)
{
matrix[i][j]=0;
}
}
}
for(int i=1;i<m;i++)
{
if(matrix[0][i]==0)
{
for(int j=1;j<n;j++)
{
matrix[j][i]=0;
}
}
}
if(firstRow)
{
for(int i=0;i<m;i++)
matrix[0][i]=0;
}
if(firstCol)
{
for(int i=0;i<n;i++)
matrix[i][0]=0;
}
[LeetCode]SetMatrix Zero的更多相关文章
- 用JavaScript刷LeetCode的正确姿势
虽然很多人都觉得前端算法弱,但其实 JavaScript 也可以刷题啊!最近两个月断断续续刷完了 leetcode 前 200 的 middle + hard ,总结了一些刷题常用的模板代码.走过路过 ...
- 我为什么要写LeetCode的博客?
# 增强学习成果 有一个研究成果,在学习中传授他人知识和讨论是最高效的做法,而看书则是最低效的做法(具体研究成果没找到地址).我写LeetCode博客主要目的是增强学习成果.当然,我也想出名,然而不知 ...
- LeetCode All in One 题目讲解汇总(持续更新中...)
终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 477 Total Hamming Distance ...
- [LeetCode] Longest Substring with At Least K Repeating Characters 至少有K个重复字符的最长子字符串
Find the length of the longest substring T of a given string (consists of lowercase letters only) su ...
- Leetcode 笔记 113 - Path Sum II
题目链接:Path Sum II | LeetCode OJ Given a binary tree and a sum, find all root-to-leaf paths where each ...
- Leetcode 笔记 112 - Path Sum
题目链接:Path Sum | LeetCode OJ Given a binary tree and a sum, determine if the tree has a root-to-leaf ...
- Leetcode 笔记 110 - Balanced Binary Tree
题目链接:Balanced Binary Tree | LeetCode OJ Given a binary tree, determine if it is height-balanced. For ...
- Leetcode 笔记 100 - Same Tree
题目链接:Same Tree | LeetCode OJ Given two binary trees, write a function to check if they are equal or ...
- Leetcode 笔记 99 - Recover Binary Search Tree
题目链接:Recover Binary Search Tree | LeetCode OJ Two elements of a binary search tree (BST) are swapped ...
随机推荐
- 转: JaxbContext生成xml文件或java类对象转化注解
JAXB(Java API for XML Binding),提供了一个快速便捷的方式将Java对象与XML进行转换.在JAX-WS(Java的WebService规范之一)中,JDK1.6 自带的版 ...
- 用.netcore写一个简单redis驱动,调试windows版本的redis.平且给set和get命令添加参数.
1. 下载windows版本的redis 2.开发环境vs2017 新建一个 .net core控制台. private static Socket socket = new Socket(Addr ...
- 在Asp.Net MVC中使用NPOI插件实现对Excel的操作(导入,导出,合并单元格,设置样式,输入公式)
前言 NPOI 是 POI 项目的.NET版本,它不使用 Office COM 组件,不需要安装 Microsoft Office,目前支持 Office 2003 和 2007 版本. 1.整个Ex ...
- AI贪吃蛇前瞻——基于Dijkstra算法的最短路径问题
在贪吃蛇流程结构优化之后,我又不满足于亲自操刀控制这条蠢蠢的蛇,干脆就让它升级成AI,我来看程序自己玩,哈哈. 一.Dijkstra算法原理 作为一种广为人知的单源最短路径算法,Dijkstra用于求 ...
- OSLab课堂作业1
日期:2019/3/16 作业:实现命令cat, cp, echo. myecho命令 #include <stdio.h> int main(int argc, char *ar ...
- python爬虫从入门到放弃(一)——试用bs4, request爬百度股票
文章实践主要来自于:https://mp.weixin.qq.com/s/FiKqb06nz0K0AD9VUWJapw 爬虫流程: 明确目的(哪些数据),确认网页可爬,查看源网页是否有需要的数据. b ...
- leetcode 91. 解码方法 JAVA
题目: 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数. ...
- Java并发编程之volatile的应用
在多线程的并发编程中synchronized和volatile都扮演着重要的角色.volatile是轻量级的synchronized,它在多处理器的开发中保证了共享变量的可见性,可见性的意思是当一个线 ...
- 前端html页面学习---html部分
作为一个后台开发人员:本篇博客主要是关注前后台交互时需要掌握的html技术,不涉及css这一块的内容:主要是自学过程中的备忘 1:html常用标签标签的学习:不列出结束标签 <p>:段落: ...
- [bug]微信小程序使用 <scroll-view> 和 box-shadow 引起页面抖动
背景 为了实现点点点动态loading效果,并且方便使用(只需要给一个空元素加一个.loading),有如下代码: .loader { background-color: #fff; font-siz ...