【LeetCode 73】矩阵置零

时间:2019-11-22
本文章向大家介绍【LeetCode 73】矩阵置零,主要包括【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;
            }
        }
    }
};

原文地址:https://www.cnblogs.com/AWCXV/p/11911711.html