题目:
给定一个 m x n
的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。
方法:使用一个标记变量 flagCol0 标记矩阵的第一列是否有零;矩阵的第一行、第一列作为标记数组;matrix[ 0 ][ 0 ]用来标记第一行是否有零。为了防止每一列的第一个元素被提前更新,我们需要从最后一行开始,倒序地处理矩阵元素。
class Solution {
public void setZeroes(int[][] matrix) {
//矩阵 m 行 n 列
int m = matrix.length, n = matrix[0].length;
boolean flagCol0 = false;
for(int i = 0; i < m; i++){
if(matrix[i][0] == 0)
flagCol0 = true;
for(int j = 1; j < n;j++){
if(matrix[i][j] == 0){
matrix[i][0] = matrix[0][j] = 0;
}
}
}
for(int i = m - 1; i >= 0; i--){
for(int j = 1;j < n; j++){
if (matrix[i][0] == 0 || matrix[0][j] == 0)
matrix[i][j] = 0;
}
if(flagCol0)
matrix[i][0] = 0;
}
}
}