LeetCode - Set Matrix Zeros

来源:互联网 发布:淘宝小号供货商 编辑:程序博客网 时间:2024/06/01 09:01

需要o(m+n)空间的方法不再赘述

我的想法是利用第一行和第一列作为某一行或者某一列需要清零的标记,比如说假如matrix[i][0] == 0,那么第i行就需要清零,如果matrix[0][j] == 0,那么第j列就需要清零。
带来的问题是第一行或者第一列需要清零的话怎么办?就采用两个bool值标记第一行以及第一列是否需要清零。

class Solution {public:    void setZeroes(vector<vector<int>>& matrix) {        int height = matrix.size();        if (0 == height)            return;        int width = matrix[0].size();        if (0 == width)            return;        bool firstRow = false;        bool firstLine = false;        for (int i = 0 ; i < height ; ++i) {            if (0 == matrix[i][0]) {                firstLine = true;                break;            }        }        for (int j = 0 ; j < width ; ++j) {            if (0 == matrix[0][j]) {                firstRow = true;                break;            }        }        for (int i = 1 ; i < height ; ++i) {            for (int j = 1 ; j < width ; ++j) {                if (0 == matrix[i][j])                    matrix[0][j] = matrix[i][0] = 0;            }        }        for (int i = 1 ; i < height ; ++i) {            if (0 == matrix[i][0]) {                for (int j = 1 ; j < width ; ++j)                    matrix[i][j] = 0;            }        }        for (int j = 1 ; j < width ; ++j) {            if (0 == matrix[0][j]) {                for (int i = 1 ; i < height ; ++i)                    matrix[i][j] = 0;            }        }        if (firstRow) {            for (int j = 0 ; j < width ; ++j)                matrix[0][j] = 0;        }        if (firstLine) {            for (int i = 0 ; i < height ; ++i)                    matrix[i][0] = 0;        }    }};

leetcode讨论区排名第一的解法,利用matrix[0][0]标记第一列是否需要清零,这样就只需要一个额外的bool变量就可以了。
https://leetcode.com/discuss/15997/any-shortest-o-1-space-solution

0 0
原创粉丝点击