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

Set Matrix Zeroes 将矩阵置零

时间:2014-11-15 12:52:48      阅读:284      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   sp   for   div   on   log   

给定一个矩阵,把零值所在的行和列都置为零。例如:

1 2 3

1 0 3

1 1 1

操作之后变为

1 0 3

0 0 0

1 0 1

 

方法1:

赋值另存一个m*n的矩阵,在原矩阵为零的值相应置新的矩阵行和列为零。额外空间为O(m*n).

 

方法2:

两个数组,bool[m] 和 bool[n] 分别存某行有零,后者某列有零。之后根据数组值将原矩阵相应位置置零。额外空间O(m + n)。

class Solution {
public:
    void setZeroes(vector<vector<int> > &matrix) {
        int len1 = matrix.size();
        if (len1 == 0) return ;
        int len2 = matrix[0].size();
        if (len2 == 0) return ;
        vector<bool > row(len1), col(len2);
        for (int i = 0; i < len1; i++)
            for (int j = 0; j < len2; j++)
            {
                if (matrix[i][j] == 0)
                {
                    row[i] = true; col[j] = true;   
                }
            }
        for (int i = 0; i < len1; i++)
            for (int j = 0; j < len2; j++)
            {
                if (row[i] == true)
                    matrix[i][j] = 0;
                else if (col[j] == true)
                    matrix[i][j] = 0;
            }
        return ;
    }
};

 

方法3:(常数额外空间)

1. 找到一个零的位置,把这行这列当做方法2中的两个数组存值。

2. 根据1的位置的所在行和列的值是否有零将矩阵相应位置置零。

3. 再把1中零所在位置的行和列置零。

class Solution {
public:
    void setZeroes(vector<vector<int> > &matrix) {
        int len1 = matrix.size();
        if (len1 == 0) return ;
        int len2 = matrix[0].size();
        if (len2 == 0) return ;
        int row = -1, col = -1;
        for (int i = 0; i < len1; i++)
            for (int j = 0; j < len2; j++)
            {
                if (matrix[i][j] == 0)
                {
                    row = i; col = j;
                }
            }
        if (row == -1) return;
        for (int i = 0; i < len1; i++)
            for (int j = 0; j < len2; j++)
            {
                if (matrix[i][j] == 0 && i != row && j != col)
                {
                    matrix[i][col] = 0;
                    matrix[row][j] = 0;
                }
            }
        for (int i = 0; i < len1; i++)
            for (int j = 0; j < len2; j++)
            {
                if (i != row && j != col)
                {
                    if (matrix[i][col] == 0 )
                        matrix[i][j] = 0;
                    else if (matrix[row][j] == 0)
                        matrix[i][j] = 0;
                }
            }
        int index = -1; 
        while(++index < len1) matrix[index][col] = 0;
        index = -1;
        while(++index < len2) matrix[row][index] = 0;
        return ;
    }
};

 

Set Matrix Zeroes 将矩阵置零

标签:style   blog   io   color   sp   for   div   on   log   

原文地址:http://www.cnblogs.com/higerzhang/p/4099114.html

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