https://leetcode.com/problems/set-matrix-zeroes/
二维数组如果某一位置是0,那么将该行和该列都置为零,要求空间复杂度O(1)
记录首行和首列是否要置为零。然后遍历数组,如果是零,就把第一行、第一列对应位置置为零。然后行列均从1开始遍历整个数组,如果第一行、列对应位置为0,则把当前遍历到的位置置为零。最后按照之前记录的首行、列,置首行、列的值。
public class Solution {
public void setZeroes(int[][] matrix) {
if (matrix == null || matrix.length == 0) {
return;
}
boolean zeroRow = false;
boolean zeroCol = false;
for (int i = 0; i < matrix.length; i++) {
if (matrix[i][0] == 0) {
zeroCol = true;
break;
}
}
for (int i = 0; i < matrix[0].length; i++) {
if (matrix[0][i] == 0) {
zeroRow = true;
break;
}
}
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[0].length; j++) {
if (matrix[i][j] == 0) {
matrix[i][0] = 0;
matrix[0][j] = 0;
}
}
}
for (int i = 1; i < matrix.length; i++) {
for (int j = 1; j < matrix[0].length; j++) {
if (matrix[0][j] == 0 || matrix[i][0] == 0) {
matrix[i][j] = 0;
}
}
}
if (zeroRow) {
matrix[0] = new int[matrix[0].length];
}
if (zeroCol) {
for (int i = 0; i < matrix.length; i++) {
matrix[i][0] = 0;
}
}
}
}