题目:
思路:
1、从题目看,在遍历数组的同时,如果遍历到0,回溯i,j,将其对应的行列变为0。不能变更后面的,后面遍历整个数组都将变成0.
2、需要额外的空间存储要变0的标记位,最后将数组需要的位置设置为0即可。
3、额外需要两个set记录行列即可。
代码:
public void setZeroes(int[][] matrix) {
int rows = matrix.length;
int columns = matrix[0].length;
Set<Integer> markRows = new HashSet<>();
Set<Integer> markColumns = new HashSet<>();
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
if (matrix[i][j] == 0) {
markRows.add(i);
markColumns.add(j);
}
}
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
if (markRows.contains(i) || markColumns.contains(j)) {
matrix[i][j] = 0;
}
}
}
}