LeetCode - 73. Set Matrix Zeros
来源:互联网 发布:淘宝警用伸缩警棍价格 编辑:程序博客网 时间:2024/06/05 16:22
参考CC 150 1.7
一开始看起来这道题好像是很简单,遍历整个矩阵,发现0元素之后就将这个元素所在的行和列都设置成0,但是这样做的是错的,因为在读取被清零的行或者列的时候,读到的都是0,很快整个矩阵的所有元素都会变成0。
避开上面问题的方法是新建一个矩阵标记0元素的位置,然后在第二次遍历的时候将0元素所在的行和列清零,这种方法的空间复杂度是O(MN)。但是仔细想一下,我们实际上并不需要这么多的空间,因为我们既然准备将整行和整列设置为0,那么并不需要记录它是matrix[2][4]之类的,只需要知道第二行有个元素是0,第4列有个元素是0即可。不论怎样,整行/列都是要清零的。所以我们采用两个数组分别记录包含零元素的所有行和列,然后在第二次遍历矩阵的时候,如果所在的行或者列已经被标记为0,那么将这个元素设置为0,空间复杂度为O(M + N),代码如下:
public class Solution{ public void setZeros(int[][] matrix){ if(matrix == null || matrix.length == 0 || matrix[0].length == 0){ return; } boolean[] row = new boolean[matrix.length]; boolean[] column = new boolean[matrix[0].length]; // Record the row and column indexes of 0 element for(int i = 0; i < matrix.length; i++){ for(int j = 0; j < matrix[0].length; j++){ if(matrix[i][j] == 0){ row[i] = true; column[j] = true; } } } // If row[i] or column[j] is 0, set matrix[i][j] 0 for(int i = 0; i < matrix.length; i++){ for(int j = 0; j < matrix[0].length; j++){ if(row[i] || column[j]){ matrix[i][j] = 0; } } } }}
0 0
- LeetCode - 73. Set Matrix Zeros
- [LeetCode] Set Matrix Zeros
- [Leetcode] Set Matrix Zeros
- 【Leetcode】Set matrix zeros
- LeetCode - Set Matrix Zeros
- LeetCode---set-matrix-zeros
- [LeetCode] Set Matrix Zeros
- LeetCode--Set matrix zeros
- LeetCode 73:Set Matrix Zeros
- leetcode-73 set matrix zeros
- LeetCode 题解(21): Set Matrix Zeros
- LeetCode刷题(39)--Set Matrix Zeros
- Set Matrix Zeros
- set matrix zeros
- set matrix zeros
- leetcode_073 Set Matrix Zeros
- 73-Set Matrix Zeros
- leetcode 73 Set Matrix Zeros 矩阵置零
- JAX-RS入门 一 :基础
- Hibernate注解使用以及Spring整合
- 初学mysql & python & python链接数据库(mysql) & mysql for linux
- Word神操作,不只是快捷键
- Java-3
- LeetCode - 73. Set Matrix Zeros
- 这个browse()方法可能抛出各种类型的异常
- java之clone方法的使用
- 深入分析 Java 中的中文编码问题
- 这个browse()方法可能抛出各种类型的异常
- 如何运行NodeJS程序
- 关于getDeclaredMethods与getMethods的的区别
- OPenCV学习笔记(5)——图像缩放
- Xcode描述文件的位置