思路:创建两个boolean类型的标记数组(行和列),遍历矩阵,如果矩阵中某个数为0,那就把对应标记数组置位0(对应的行和列),再次遍历,判断标记数组,只要标记数组中行或列为true,就把对应行列的所有值置为0.
代码:
class Solution {
public void setZeroes(int[][] matrix) {
//标记数组
int m = matrix.length, n = matrix[0].length;
//创建两个标记数组
boolean[] row = new boolean[m];
boolean[] col = new boolean[n];
//如果某行某列的元素等于0,就把对应的标记数组设为true
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (matrix[i][j] == 0) {
row[i] = col[j] = true;
}
}
}
//只要标记数组一个为true,就把对应的元素设置为0
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (row[i] || col[j]) {
matrix[i][j] = 0;
}
}
}
}
}