此博客链接:
零矩阵
题目链接:https://leetcode-cn.com/leetbook/read/array-and-string/ciekh/
题目
编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。
示例 1:
输入:
[
[1,1,1],
[1,0,1],
[1,1,1]
]
输出:
[
[1,0,1],
[0,0,0],
[1,0,1]
]
示例 2:
输入:
[
[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开始把0所在的行和列置0用的。这里有个问题就是被置为0的会被重新认为是0,会把置为0的行和列再次置为0。这里我设置了一个标志位,对原来数组中的0设置标志,如果是原来数组中的0后面才把行和列都置为0.
代码
class Solution { public void setZeroes(int[][] matrix) { int row=matrix.length; int col=matrix[0].length; int h=0; int l=0; int flag[][]=new int [row][col]; for(int i=0;i<row;i++){ for(int j=0;j<col;j++){ if(matrix[i][j]==0){ flag[i][j]=0; } else{ flag[i][j]=1; } } } for(int i=0;i<row;i++) { for(int j=0;j<col;j++){ if(matrix[i][j]==0&&flag[i][j]==0){ h=0; l=0; while(h<row){ matrix[h][j]=0; h++; } while(l<col){ matrix[i][l]=0; l++; } } } } } }