参考
时间复杂度: O ( n m ) O(nm) O(nm)
空间复杂度: O ( 1 ) O(1) O(1)
class Solution {
public static void setZeroes(int[][] matrix)
{
int n = matrix.length;
if (n == 0)
return;
int m = matrix[0].length;
int row = 1;//记录第一行是否有 0
int col = 1;//记录第一列是否有 0
for (int i = 0; i < m; i++)
if (matrix[0][i] == 0)
row = 0;
for (int i = 0; i < n; i++)
if (matrix[i][0] == 0)
col = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
if (matrix[i][j] == 0)
{
// 使用当前行首和列首记录当前行列是否需要置零
matrix[i][0] = 0;
matrix[0][j] = 0;
}
}
// 根据行首列首 标识位 置0
for (int i = 1; i < n; i++)
if (matrix[i][0] == 0)
Arrays.fill(matrix[i], 0);
for (int i = 1; i < m; i++)
if (matrix[0][i] == 0)
for (int j = 0; j < n; j++)
matrix[j][i] = 0;
// 最后再处理第一行和第一列
if (row == 0)
Arrays.fill(matrix[0], 0);
if (col == 0)
{
for (int i = 0; i < n; i++) {
matrix[i][0] = 0;
}
}
}
}