基本思路:
非常简单的一道题,需要注意的点就是,当你找到一个0的时候不能立刻在循环里将其行和列的数字置0,因为会干扰外层的循环,因此我们需要定义两个数组,将为0的位置先存下来,当整个二维数组都遍历完成后,再进行置0操作。
代码实现:
class Solution {
public void setZeroes(int[][] matrix) {
int m = matrix.length;
int n = matrix[0].length;
//使用两个标记数组标记这一行或者列是否有0出现
boolean[] hang = new boolean[m];
boolean[] lie = new boolean[n];
//遍历这个二维数组如果有等于0的就把它记录下来
for(int i = 0; i < m;i++){
for(int j = 0;j <n;j++){
if(matrix[i][j] == 0){
hang[i] = lie[j] = true;
}
}
}
//将0所在的场和列的所有数字转化为0
for(int i = 0; i < m;i++){
for(int j = 0;j <n;j++){
if(hang[i] || lie[j])
matrix[i][j] = 0;
}
}
}
}