LeetCode | 73. Set Matrix Zeroes

来源:互联网 发布:易观数据怎么样 编辑:程序博客网 时间:2024/06/17 00:24


题目:

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


题意:

言简意赅,即目标是在输入矩阵中,某元素(i, j)为0时,将其所在行i和列j上的元素全部变为0;要求在原矩阵上进行变换,所以需要先判断每行每列的0情况,存储在vector idxI和idxJ里,之后再次遍历矩阵,若其坐标中(i, j)所对应的行列有出现过0元素,则替换为0。


代码:

void setZeroes(vector<vector<int>>& matrix) {        int r = matrix.size();        if(r < 1)            return;        int c = matrix[0].size();        if(c < 1)            return;        vector<int> idxI(r, 1), idxJ(c, 1);        for(int i = 0; i<r; i++)        {            for(int j = 0; j<c; j++)            {                if(!matrix[i][j])                {                    idxI[i] = 0;                    idxJ[j] = 0;                }            }        }        for(int i = 0; i<r; i++)        {            for(int j = 0; j<c; j++)            {                if(!idxI[i] || !idxJ[j])                {                    matrix[i][j] = 0;                }            }        }        return;    }


效率貌似不太高,参考了讨论区的解法,思路基本差不多>.<,下面贴一个讨论区的代码:

void setZeroes(vector<vector<int> > &matrix) {    int col0 = 1, rows = matrix.size(), cols = matrix[0].size();    for (int i = 0; i < rows; i++) {        if (matrix[i][0] == 0) col0 = 0;        for (int j = 1; j < cols; j++)            if (matrix[i][j] == 0)                matrix[i][0] = matrix[0][j] = 0;    }    for (int i = rows - 1; i >= 0; i--) {        for (int j = cols - 1; j >= 1; j--)            if (matrix[i][0] == 0 || matrix[0][j] == 0)                matrix[i][j] = 0;        if (col0 == 0) matrix[i][0] = 0;    }}


如果有更简单的思路,欢迎讨论~






原创粉丝点击