给定一个 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分别为矩阵的行数和列数。
|