Set Matrix Zeroes

来源:互联网 发布:青岛齐鲁商品交易软件 编辑:程序博客网 时间:2024/06/05 21:50

Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.

描述:给定一个数组,如果数组中某一个位置的元素为0,则将该元素所在行和列的元素都设置为0

思路:

(1)isFirstColZero和isFirstRowZero用来标记原始没有修改的时候数组第一行和第一列是不是含有0元素,因为后序会修改数组的第一行和第一列

(2)从i=1,j=1开始遍历数组。如果nums[i][j]==0,则用nums[i][0]=0来标记第i行应该设置为0,nums[0][j]=0来标记第j行应该设置为0

(3)从i=1,j=1开始遍历数组,对于 nums[i][j],如果nums[i][0]=0或者nums[0][j]=0,则nums[i][j]应该设置为0

(4)检查isFirstColZero和isFirstRowZero来判断下是不是要将第一列和是第一行置0

class Solution {public:    void setZeroes(vector<vector<int>>& matrix) {        int row=matrix.size();        if(row<1)            return;        int col=matrix[0].size();        bool isFirstColZero=false;        bool isFirstRowZero=false;        for(int i=0;!isFirstRowZero&&i<col;i++)            if(matrix[0][i]==0)                isFirstRowZero=true;        for(int i=0;!isFirstColZero&&i<row;i++)            if(matrix[i][0]==0)                isFirstColZero=true;        for(int i=1;i<row;i++)            for(int j=1;j<col;j++)            {                if(matrix[i][j]==0)                {                    matrix[i][0]=0;                    matrix[0][j]=0;                }            }        for(int i=1;i<row;i++)            for(int j=1;j<col;j++)                if(matrix[i][0]==0 || matrix[0][j]==0)                    matrix[i][j]=0;        if(isFirstRowZero)            for(int i=0;i<col;i++)                matrix[0][i]=0;        if(isFirstColZero)        {            for(int i=0;i<row;i++)                matrix[i][0]=0;        }        return;    }};


0 0
原创粉丝点击