矩阵归零-LintCode

来源:互联网 发布:淘宝上怎么卖点卡 编辑:程序博客网 时间:2024/04/30 21:35

给定一个m×n矩阵,如果一个元素是0,则将其所在行和列全部元素变成0。
需要在原矩阵上完成操作。
样例:
给出一个矩阵
[
[1, 2],
[0, 3]
]
返回
[
[0, 2],
[0, 0]
]
挑战 :
你是否使用了额外的空间?
一个直接的解决方案是使用 O(MN) 的额外空间,但这并不是一个好的方案。
一个简单的改进方案是使用 O(M + N) 的额外空间,但这仍然不是最好的解决方案。
你能想出一个常数空间的解决方案吗?

#ifndef C162_H#define C162_H#include<iostream>#include<vector>using namespace std;class Solution {public:    /*    * @param matrix: An integer    * @return:    */    void setZeroes(vector<vector<int>>& matrix) {        // write your code here        int len = matrix.size();        if (len <= 0)            return;        int size = matrix[0].size();        if (size <= 0)            return;        bool rowzero = false, colzero = false;        for (int i = 0; i < len; ++i)        {            if (matrix[i][0] == 0)            {                colzero = true;                break;            }        }        for (int j = 0; j < size; ++j)        {            if (matrix[0][j] == 0)            {                rowzero = true;                break;            }        }        for (int i = 1; i < len; ++i)        {            for (int j = 1; j < size; ++j)            {                if (matrix[i][j] == 0)                {                    matrix[i][0] = 0;                    matrix[0][j] = 0;                }            }        }        for (int j = 1; j < size; ++j)        {            if (matrix[0][j] == 0)            {                for (int i = 0; i < len; ++i)                {                    matrix[i][j] = 0;                }            }        }        for (int i = 1; i < len; ++i)        {            if (matrix[i][0] == 0)            {                for (int j = 0; j < size; ++j)                {                    matrix[i][j] = 0;                }            }        }        if (rowzero)        {            for (int j = 0; j < size; ++j)                matrix[0][j] = 0;        }        if (colzero)        {            for (int i = 0; i < len; ++i)                matrix[i][0] = 0;        }    }};#endif
原创粉丝点击