leetcode 73.矩阵置零

矩阵置零

题目描述

leetcode 73.矩阵置零_第1张图片

解题思路

以下的行和列从1开始数。
利用第一行和第一列来保存剩余的元素中是否还有零元素,如果有,那么需要把第一行和第一列中的对应元素置为0,来表示需要将此行和此列全部置0。但是这样做会破坏第一行和第一列的初始状态,使我们无法获取第一行和第一列是否有0,我们所以需要两个变量来保存第一行和第一列是否原本就有0.
在遍历元素修改第一行和第一列元素时候,我们从第二行或者第二列开始遍历
在置零的时候,我们访问的是第一行和第一列,根据第一行的0元素将对应列置0,根据第一列的0元素将对应行置0.

代码实现

class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) 
    {
        //获取矩阵的行数和列数
        int rownumber = matrix.size();
        int columnnumber = matrix[0].size(); 

        int rowflag = 0; 
        int columnflag = 0;

        //定义两个标记变量 来保存第一行和第一列是否具有零
        //使用第一行和第一列来保存 对应列和行是否有零元素
        for(int i = 0 ;i < columnnumber;++i)
        {
            if(matrix[0][i] == 0)
            {
                rowflag = 1;
                break;
            }
        }
        for(int i = 0 ; i < rownumber;++i)
        {
            if(matrix[i][0] == 0 )
            {
                columnflag = 1;
                break;
            }
        }
        //开始遍历矩阵 判断是否有0 有0需要把相应的第一行和第一列对应的元素置为0
        for(int i = 1 ; i < rownumber ; ++i)
        {
            for(int j = 1 ; j < columnnumber ;++j)
            {
                if(matrix[i][j] == 0)
                {
                    matrix[i][0] = matrix[0][j] = 0;
                }
            }
        }
        //根据第一行 将对应列置为0
        for(int i = 1; i < columnnumber ; ++i)
        {
            if(matrix[0][i] == 0 )
            {
                for(int j = 1 ; j < rownumber ; ++j)
                {
                    matrix[j][i] = 0;
                }
            }
        }
        //根据第一列 将对应列行置为0
        for(int i = 1; i < rownumber ; ++i)
        {
            if(matrix[i][0] == 0 )
            {
                for(int j = 0 ; j < columnnumber ; ++j)
                {
                    matrix[i][j] = 0;
                }
            }
        }


        //根据标志位 将第1行和第1列置为0
        if(rowflag == 1)
        {
            for(int i = 0; i < columnnumber ;++i)
            {
                matrix[0][i] = 0;
            }
        }
        if(columnflag == 1)
        {
            for(int i = 0; i < rownumber ;++i)
            {
                matrix[i][0] = 0;
            }
        }
    }
};

你可能感兴趣的:(leetcode,c++,leetcode,矩阵,算法)