【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;
            }
        }
    }
};
posted @ 2019-11-22 15:17  AWCXV  阅读(153)  评论(0编辑  收藏  举报