赞
踩
给定一个 m x n
的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 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来取行元素
- class Solution {
- public void setZeroes(int[][] matrix) {
- int m = matrix.length, n = matrix[0].length;
- boolean[] row = new boolean[m];
- boolean[] low = new boolean[n];
-
- for(int i = 0; i < m; i++){
- for(int j = 0; j < n; j++){
- //如果矩阵中的元素为0.那么将此元素所在的行以及列均标记为true
- if(matrix[i][j] == 0){
- row[i] = low[j] = true;
- }
- }
- }
- //第二次循环数组
- for(int i = 0; i < m; i++){
- for(int j = 0; j < n; j++){
- //将标记为true的行或者列的元素均设置为 0
- if(row[i] || low[j]){
- matrix[i][j] = 0;
- }
- }
- }
- }
- }
方法来源于力扣官网
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。