当前位置:   article > 正文

[矩阵置零]LeedCood算法 ——​给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法​_给定一个n×m的矩阵 如果矩阵中任意元素是0

给定一个n×m的矩阵 如果矩阵中任意元素是0

73. 矩阵置零

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

算法来源:https://leetcode.cn/problems/set-matrix-zeroes/

示例 1:


输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[1,0,1],[0,0,0],[1,0,1]]
示例 2:


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

题目理解:对于本题的理解,如果矩阵中出现0,那么0所在的行和列全部设置为0

思路:

采用两个循环标记法

1.第一个循环:遍历数组,将矩阵中存在0的元素标记为true

2.第二个循环:遍历数组,将标记的元素所在行以及列 均设置为0

不理解之处:

matrix.length:表示整个数组的长度

matrix[0].length:每个数组里面的长度

 m = matrix.length, n = matrix[0].length

其中m表示行元素个数    n表示列元素个数

疑问:为什么写成 matrix[0].length:   

答:应该也可以写成matrix[1].length  但是第0行,肯定是有的,所以将索引写成0来取行元素

  1. class Solution {
  2. public void setZeroes(int[][] matrix) {
  3. int m = matrix.length, n = matrix[0].length;
  4. boolean[] row = new boolean[m];
  5. boolean[] low = new boolean[n];
  6. for(int i = 0; i < m; i++){
  7. for(int j = 0; j < n; j++){
  8. //如果矩阵中的元素为0.那么将此元素所在的行以及列均标记为true
  9. if(matrix[i][j] == 0){
  10. row[i] = low[j] = true;
  11. }
  12. }
  13. }
  14. //第二次循环数组
  15. for(int i = 0; i < m; i++){
  16. for(int j = 0; j < n; j++){
  17. //将标记为true的行或者列的元素均设置为 0
  18. if(row[i] || low[j]){
  19. matrix[i][j] = 0;
  20. }
  21. }
  22. }
  23. }
  24. }

方法来源于力扣官网

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号