LeetCode: Set Matrix Zeroes

来源:互联网 发布:阿里云网站空间误删 编辑:程序博客网 时间:2024/06/05 12:03

Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.

Follow up:

Did you use extra space?
A straight forward solution using O(mn) space is probably a bad idea.
A simple improvement uses O(m + n) space, but still not the best solution.

Could you devise a constant space solution?

题目解析:当一个矩阵中一个元素为0时,将该元素所在行和所在列都设置为0.

简答的方法包括复制一个矩阵,一个元素一个元素扫描,空间代价为O(mn)

分配两个数组分别记录每行是否有0和每列是否有0,时间代价为O(m + n)

最节省空间代价方法:用矩阵的第一行和第一列记录其所在行和列是否有0,提前记录好第一行和第一列是否有0,不然后面没法判断

这个时候,空间代价为O(1)。

源代码:

void setZeroes(int** matrix, int matrixRowSize, int matrixColSize) {        bool firstRow = false;    bool firstCol = false;    for (int i = 0; i < matrixRowSize; ++i) {        if (matrix[i][0] == 0) {            firstCol = true;            break;        }    }        for (int i = 0; i < matrixColSize; ++i) {        if (matrix[0][i] == 0) {            firstRow = true;            break;        }    }        for (int i = 1; i < matrixRowSize; ++i) {        for (int j = 1; j < matrixColSize; ++j) {            if (matrix[i][j] == 0) {                matrix[i][0] = 0;                matrix[0][j] = 0;            }        }    }    for (int i = 1; i < matrixRowSize; ++i) {        for (int j = 1; j < matrixColSize; ++j) {            if (matrix[i][0] == 0 || matrix[0][j] == 0) matrix[i][j] = 0;        }    }    if (firstRow) {        for (int i = 0; i < matrixColSize; ++i)  {            matrix[0][i] = 0;        }    }    if (firstCol) {        for (int i = 0; i < matrixRowSize; ++i) {            matrix[i][0] = 0;        }    }    }


1 0
原创粉丝点击