

基本思路:
非常简单的一道题,需要注意的点就是,当你找到一个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;
}
}
}
}
本文介绍了如何在二维数组中高效地定位并最终置零所有遇到的0元素,通过双重循环和额外的标记数组来避免立即修改可能影响搜索结果的问题。
893

被折叠的 条评论
为什么被折叠?



