leetcode题解-73. Set Matrix Zeroes
来源:互联网 发布:网络课影视鉴赏答案 编辑:程序博客网 时间:2024/06/09 16:08
题意:给定一个二维数组表示一个矩阵,如果某个元素为0,那么把这个元素所在行和列的所有元素置为0。不使用额外空间。
题解:
如果使用额外空间,那么就需要记录含零元素的行列情况。
如果不使用额外空间,就不能使用额外的数组或者HashSet来记录含0元素的位置情况。因此就要考虑在矩阵本身进行操作。具体操作:我们以矩阵的第一行和第一列空间来分别存储矩阵中所有“0”出现的行、列下标,第一行存储列下标,第一列存储行下标,遍历完后,我们再将对应的行、列元素全部置零即可,如下图示对应两种情况:
第一个例子中,第一行、第一列中不存在“0”,矩阵中”0”对应的行列下标存储在第一行和第一列,存储方式就是将对应的元素置零即可,第一行中有两个“0”,我们就将它们对应的列全部置零;第一列有三个零,我们就将对应的行全部置零,很明显得到正确结果,红色数字将被置零。
第二个例子中,第一行、列存在“0”处理方式有所不同,如果第一行原始存在“0”则不仅要将这个“0”对应的列置零,还需将该行置零,第一列若在“0”,同样需将该零对应的列置零,因此,我们在利用第一行和第一列作为存储空间之前需要确认第一行和第一列是否存在“0”,若存在,最后需将对应的行列置零。
代码:
1、使用额外空间:
import java.util.HashSet;class Solution { public static void setZeroes(int[][] matrix) { int m = matrix.length; int n = matrix[0].length; HashSet<Integer> hsm = new HashSet<Integer>(); HashSet<Integer> hsn = new HashSet<Integer>(); for(int i = 0; i < m; i++){ for(int j = 0; j < n; j++){ if(matrix[i][j] == 0){ hsm.add(i); hsn.add(j); } } } for(int i = 0; i < m; i++){ for(int j = 0; j < n; j++){ if(hsm.contains(i) || hsn.contains(j)){ matrix[i][j] = 0; } } } } public static void main(String[] args) { int[][] matrix = {{1,2,3}, {4,5,6}, {7,0,9}}; setZeroes(matrix); for(int i = 0; i < matrix.length; i++){ for(int j = 0; j < matrix[0].length; j++){ System.out.print(matrix[i][j] + " "); } System.out.println(); } }}
2、不使用额外空间
public class Solution {public void setZeroes(int[][] matrix) { boolean fr = false,fc = false; for(int i = 0; i < matrix.length; i++) { for(int j = 0; j < matrix[0].length; j++) { if(matrix[i][j] == 0) { if(i == 0) fr = true; if(j == 0) fc = true; matrix[0][j] = 0; matrix[i][0] = 0; } } } for(int i = 1; i < matrix.length; i++) { for(int j = 1; j < matrix[0].length; j++) { if(matrix[i][0] == 0 || matrix[0][j] == 0) { matrix[i][j] = 0; } } } if(fr) { for(int j = 0; j < matrix[0].length; j++) { matrix[0][j] = 0; } } if(fc) { for(int i = 0; i < matrix.length; i++) { matrix[i][0] = 0; } } public static void main(String[] args) { int[][] matrix = {{1,2,3}, {4,5,6}, {7,0,9}}; setZeroes(matrix); for(int i = 0; i < matrix.length; i++){ for(int j = 0; j < matrix[0].length; j++){ System.out.print(matrix[i][j] + " "); } System.out.println(); } }}
阅读全文
0 0
- leetcode题解-73. Set Matrix Zeroes
- LeetCode题解:Set Matrix Zeroes
- Set Matrix Zeroes|leetcode题解
- [LeetCode]73.Set Matrix Zeroes
- LeetCode --- 73. Set Matrix Zeroes
- [Leetcode] 73. Set Matrix Zeroes
- [leetcode] 73.Set Matrix Zeroes
- 【leetcode】73. Set Matrix Zeroes
- [leetcode] 73. Set Matrix Zeroes
- Leetcode 73. Set Matrix Zeroes
- LeetCode 73. Set Matrix Zeroes
- LeetCode 73. Set Matrix Zeroes
- 73. Set Matrix Zeroes LeetCode
- [LeetCode]73. Set Matrix Zeroes
- [LeetCode]73. Set Matrix Zeroes
- leetcode 73. Set Matrix Zeroes
- LeetCode 73. Set Matrix Zeroes
- LeetCode *** 73. Set Matrix Zeroes
- websocket 、stomp关系
- 我理解的数字证书-1-公钥,私钥和数字证书
- Windows下通过bat批处理文件和vbs脚本实现守护进程
- activity blog
- matlab 教程 (一)
- leetcode题解-73. Set Matrix Zeroes
- C#导出数据到Excel的几种方法
- 如何设置同一网段IP
- centos管理经验
- php常用Output和ptions/Info函数集介绍
- Java后台之路(01)-MySql
- java中的多态
- 关于数据库中动态字段的说明
- PWN综合练习二