leetcode-矩阵置零

开发者 2024-9-10 05:57:24 75 0 来自 中国
    给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其地点行和列的全部元素都设为 0 。请使用 原地 算法。
示例 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]]提示:
m == matrix.lengthn == matrix[0].length1 <= m, n <= 200-231 <= matrix[j] <= 231 - 1标题形貌:给定一个m x n的矩阵,如果一个元素为0,则将其地点的行和列的全部元素都设为0。
思路:使用两个数组记载哪些行和哪些列须要置零,遍历整个矩阵,当遍历到matrix[j]为0时,将row和col[j]置为true。再次遍历整个矩阵,当matrix[j]地点的行或列已被标志时,将其置为0。
办理这道题须要以下知识储备:
1.二维数组的界说和操纵;
2.遍历二维数组的方法;
3.布尔数组的界说和使用;
4.嵌套循环的使用;
5.时间复杂度和空间复杂度的概念。
代码实现:
class Solution {    public void setZeroes(int[][] matrix) {        int m = matrix.length;        int n = matrix[0].length;        boolean[] row = new boolean[m];        boolean[] col = new boolean[n];        for(int i=0; i<m; i++){            for(int j=0; j<n; j++){                if(matrix[j] == 0){                    row = true;                    col[j] = true;                }            }        }        for(int i=0; i<m; i++){            for(int j=0; j<n; j++){                if(row || col[j]){                    matrix[j] = 0;                }            }        }    }}    这道题的思路比力简朴,就是先遍历整个矩阵,将全部为0的元素地点的行和列标志为须要置为0的行和列,然后再次遍历整个矩阵,将须要置为0的行和列中的元素全部置为0。
    具体实现时,可以使用两个boolean数组row和col,分别记载哪些行和哪些列须要置为0。首先遍历整个矩阵,当遍历到matrix[j]为0时,将row和col[j]置为true。然后再次遍历整个矩阵,当matrix[j]地点的行或列已被标志时,将其置为0即可。

  • 时间复杂度为
    O(m*n)
  • 空间复杂度为
    O(m+n)
    其中m和n分别为矩阵的行数和列数。
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-12-4 16:32, Processed in 0.130212 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表