Set Matrix Zeroes

来源:互联网 发布:二叉树层次遍历java 编辑:程序博客网 时间:2024/04/28 14:06

当a[i][j]是0的时候,就意味着i这一行了和j这一列都要置为0,不能用多余的数组记录,那么我们就把记录的tag位设在行首和列首,当然这两个位置也可能出现0的情况。那么我们

就用另外两个值记录第一行和第一列是否有0值。这里有一点要想明白,我们为什么要这另外两个值,因为我们要判断tag位的0是不是由我们a[i][j]引起的,而这只影响了这一列或

者这一行是否应该置为0,所以第一行第一列只要分别对应一个值来记录他们是否应该置为0。

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


0 0
原创粉丝点击