您的位置:首页 > 其它

[算法分析与设计] leetcode 每周一题: Set Matrix Zeroes

2017-10-08 14:51 501 查看
题目链接:https://leetcode.com/problems/set-matrix-zeroes/description/

题目大意:给定一个整数矩阵,该矩阵任意一个元素 == 0 则 将该元素对应的行和列都置0;

思路: 该题并不复杂,唯一需要注意的是不能一遍判断矩阵元素是否为0一遍重置矩阵,否则会导致全矩阵为0;一开始本人是想到MXN复杂度的解法,就是简单暴力开辟另一个矩阵,然而看到算法提示说O(mn)是个糟糕的注意,就想到了开辟两个布尔数组,分别带别行列是否有0;

代码如下:

class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
if(!matrix.size()) return;
int lenRow = matrix.size();
int lenCol = matrix[0].size();
vector<bool> row(lenRow,false);
vector<bool> col(lenCol,false);

for(int i = 0; i < lenRow; i++) {
for(int j = 0; j < lenCol; j++) {
if(matrix[i][j] == 0) {
row[i] = true;
col[j] = true;
}

}
}

for(int i = 0 ; i < lenRow; i++) {
if(row[i]) {
for(int j = 0; j < lenCol; j++) {
matrix[i][j] = 0;
}
}
}

for(int i = 0 ; i < lenCol; i++) {
if(col[i]) {
for(int j = 0; j < lenRow; j++) {
matrix[j][i] = 0;
}
}
}
}
};不过,并没有想到O(1)的解法,看了网上博客,发现是在已有的矩阵的第一行第一列上进行处理,具体而言就是如果发现某元素(m, n)为0 ,就将(m,0), (0,n)改为0, 最后清算。具体代码就不列出来了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: