【LeetCode 73】矩阵置零
【题解】
如果a[i][j]==0. 就把第i行的第一个数字置为0 然后把第j列的第一个数字置为0 最后再处理下每行第一个为0的行。每列第一个为0的列。 (第一行和第一列都得用同一个位置处理,所以会冲突。得额外定义一个变量,表示第1行是否需要全都置0) 然后把对应的行。列的元素全都置为0. 但是第一行和第一列的元素需要特别处理。 所以先把第2..n行和2..m列的处理了。 然后处理第一列即看a[1][1]是不是0,判断后改变对应列。 然后看额外定义的变量是否为1. 为1的话就把第一行也置为0. 这样就不会产生冲突了。【代码】
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
if (matrix.empty()) return;
int n = matrix.size();int m = matrix[0].size();
int TR = 0;
for (int i = 0;i < n;i++)
for (int j = 0;j<m;j++)
if (matrix[i][j]==0){
matrix[0][j] = 0;
if (i==0)
TR=1;
else
matrix[i][0] = 0;
}
for (int i = 1;i<n;i++){
if (matrix[i][0]==0){
for (int j = 0;j < m;j++)
matrix[i][j] = 0;
}
}
for (int j = 0;j < m;j++){
if (matrix[0][j]==0){
for (int i = 0;i < n;i++)
matrix[i][j] = 0;
}
}
if (TR==1){
for (int j = 0;j < m;j++){
matrix[0][j] = 0;
}
}
}
};