[算法分析与设计] 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, 最后清算。具体代码就不列出来了
题目大意:给定一个整数矩阵,该矩阵任意一个元素 == 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, 最后清算。具体代码就不列出来了
相关文章推荐
- [算法分析与设计] leetcode 每周一题: 542. 01 Matrix
- [算法分析与设计] leetcode 每周一题:Longest Substring Without Repeating Characters
- [算法分析与设计] leetcode 每周一题: 312. Burst Balloons
- [算法分析与设计] leetcode 每周一题: 050. Pow(x, n)
- [算法分析与设计] leetcode 每周一题: 078. Subsets
- [算法分析与设计] leetcode 每周一题: 030. Substring with Concatenation of All Words
- [算法分析与设计] leetcode 每周一题: 328. Odd Even Linked List
- [算法分析与设计] leetcode 每周一题: Validate Binary Search Tree
- [算法分析与设计] leetcode 每周一题: Word Ladder
- [算法分析与设计] leetcode 每周一题: 335. Self Crossing
- [算法分析与设计] leetcode 每周一题: 62. Unique Paths
- [算法分析与设计] leetcode 每周一题: 494. Target Sum
- [算法分析与设计] leetcode 每周一题: Minimum Time Difference
- [算法分析与设计] leetcode 每周一题: UTF-8 Validation
- [算法分析与设计] leetcode 每周一题: 135. Candy
- [算法分析与设计] leetcode 每周一题: 310. Minimum Height Trees
- [算法分析与设计] leetcode 每周一题: Kth Smallest Element in a BST
- 【LeetCode-面试算法经典-Java实现】【070-Set Matrix Zeroes(矩阵置零)】
- [算法分析与设计] leetcode 每周一题: 162. Find Peak Element
- [算法分析与设计] leetcode 每周一题: 420. Strong Password Checker