码迷,mamicode.com
首页 > 其他好文 > 详细

Set Matrix Zeroes - LeetCode

时间:2019-03-01 23:30:31      阅读:291      评论:0      收藏:0      [点我收藏+]

标签:i++   src   alt   注意   链接   个数   https   line   修改   

题目链接

Set Matrix Zeroes - LeetCode

注意点

  • 不要用O(mn)空间复杂度的解法

解法

解法一:line数组表示第i行是否有0,row数组表示第i列是否有0,先遍历一遍,某个位置为0就修改相应的数组。最后根据line和row两个数组来修改matrix。时间复杂度O(mn),空间复杂度O(m+n)

class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        if(matrix.size() == 0 || matrix[0].size() == 0) return;
        int m = matrix.size(),n = matrix[0].size();
        int i,j,line[m],row[n];
        for(i = 0;i < m;i++) line[i] = 0;
        for(i = 0;i < n;i++) row[i] = 0;
        for(i = 0;i < m;i++)
        {
            for(j = 0;j < n;j++)
            {
                if(matrix[i][j] == 0)
                {
                    line[i] = 1;
                    row[j] = 1;
                }
            }
        }
        for(i = 0;i < m;i++)
        {
            if(line[i] == 1)
            {
                for(j = 0;j < n;j++) matrix[i][j] = 0;
            }
        }
        for(i = 0;i < n;i++)
        {
            if(row[i] == 1)
            {
                for(j = 0;j < m;j++) matrix[j][i] = 0;
            }
        }
    }
};

技术图片

解法二:用line和row来标记第一行第一列是否有0。然后遍历除第一行第一列之外的matrix,如果某个位置为0就把第一行第一列的对应位置置0,然后再遍历一遍除第一行第一列之外的matrix,如果对应的第一行或者第一列为0,就置为0。时间复杂度O(mn),空间复杂度O(1)

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

技术图片

小结

  • 很少遇到对空间复杂度有要求的题目

Set Matrix Zeroes - LeetCode

标签:i++   src   alt   注意   链接   个数   https   line   修改   

原文地址:https://www.cnblogs.com/multhree/p/10459292.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!