booleanrow=false, col = false; for (inti=0; i < n; i++) { if (matrix[0][i] == 0) { row = true; } } for (inti=0; i < m; i++) { if (matrix[i][0] == 0) { col = true; } }
// 把其他行列的结果存到第一行 for (inti=1; i < m; i++) { for (intj=1; j < n; j++) { if (matrix[i][j] == 0) { matrix[i][0] = 0; matrix[0][j] = 0; } } }
// 修改 for (inti=1; i < m; i++) { for (intj=1; j < n; j++) { if (matrix[i][0] == 0 || matrix[0][j] == 0) { matrix[i][j] = 0; } } }
// 修改第一行 if (row) { for (inti=0; i < n; i++) { matrix[0][i] = 0; } }
if (col) { for (inti=0; i < m; i++) { matrix[i][0] = 0; } }
} }
时间复杂度:O(m*n),其中 m 和 n 分别是矩阵的行数和列数。我们需要遍历整个矩阵一次来标记需要置零的行和列,然后再遍历一次来修改矩阵。