Set Matrix Zeroes
来源:互联网 发布:淘宝店铺查封怎么处理 编辑:程序博客网 时间:2024/06/05 12:07
Description:
Given a m × 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?
#include <iostream>#include <algorithm>using namespace std;//time-complexity is O(m*n), space-complexity is O(m+n)class Solution_1{public: void setMatrixZeros(vector<vector<int> > &matrix) { const size_t m = matrix.size(); const size_t n = matrix[0].size(); vector<bool> row(m,false); //标记每一行 vector<bool> col(n,false); //标记每一列 for (size_t i=0; i < m; ++i) { for (size_t j=0; j < n; ++j) { if (matrix[i][j] == 0) { row[i] = true; col[j] = true; } } } for (size_t i=0; i < m; ++i) if (row[i]) fill(&matrix[i][0],&matrix[i][0]+n,0); for (size_t j=0; j < n; ++j) { if (col[j]) { for (size_t i=0; i < m; ++i) { matrix[i][j] = 0; } } } //结果输出 cout<<"Solution 1 is : "<<endl; for (size_t i = 0 ; i < m ; ++i) { for (size_t j = 0; j < n ; ++j) { cout<<matrix[i][j]<<" "; } cout<<endl; } }};//time-complexity is O(m*n), space-complexity is O(1), 借助于矩阵的第一行,第一列class Solution_2{public: void setMatrixZeros(vector<vector<int> > &matrix) { const size_t m = matrix.size(); const size_t n = matrix[0].size(); //记录下第一行,第一列第一次出现0的位置(也有可能没有0) bool row_has_zero = false; bool col_has_zero = false; for (size_t i = 0 ; i < m ; ++i) //第一列 { if (matrix[i][0] == 0) { col_has_zero = true; break; } } for (size_t j = 0 ; j < n ; ++j) //第一行 { if (matrix[0][j] == 0) { row_has_zero = true; break; } } for (size_t i = 1 ; i < m ; ++i) { for (size_t j = 1; j < n; ++j) { if (matrix[i][j] == 0) { matrix[i][0] = 0; matrix[0][j] = 0; } } } for (size_t i = 0; i < m ; ++i) { for (size_t j = 0; j < n; ++j) { if (matrix[i][0] == 0 | matrix[0][j] == 0) { matrix[i][j] = 0; } } } if (row_has_zero) for (size_t j = 0; j < n; ++j) { matrix[0][j] == 0; } if (col_has_zero) for (size_t i = 0; i < m; ++i) { matrix[i][0] = 0; } //结果输出 cout<<"Solution 2 is : "<<endl; for (size_t i = 0 ; i < m ; ++i) { for (size_t j = 0; j < n ; ++j) { cout<<matrix[i][j]<<" "; } cout<<endl; } }};int main(){ vector<vector<int> > matrix ={{1,2,0},{3,0,3},{4,7,0}}; //结果输出 cout<<"matrix is : "<<endl; for (size_t i = 0 ; i < matrix.size() ; ++i) { for (size_t j = 0; j < matrix[0].size() ; ++j) { cout<<matrix[i][j]<<" "; } cout<<endl; } Solution_1 solution_1; solution_1.setMatrixZeros(matrix); Solution_2 solution_2; solution_2.setMatrixZeros(matrix); return 0;}
0 0
- LeetCode: Set Matrix Zeroes
- Set Matrix Zeroes
- Set Matrix Zeroes
- LeetCode Set Matrix Zeroes
- [Leetcode] Set Matrix Zeroes
- LeetCode: Set Matrix Zeroes
- Set Matrix Zeroes
- Leetcode: Set Matrix Zeroes
- [LeetCode] Set Matrix Zeroes
- Set Matrix Zeroes
- Set Matrix Zeroes
- [LeetCode]Set Matrix Zeroes
- Set Matrix Zeroes
- Set Matrix Zeroes
- Set Matrix Zeroes
- [leetcode]Set Matrix Zeroes
- Leetcode:Set Matrix Zeroes
- Set Matrix Zeroes
- Matlab自定义函数的几种方法
- 调用startactivityforresult后,onactivityresult立刻响应问题
- 用函数调用的方法求字符串的最大值和最小值
- ssh操作服务器命令
- Android IPC之AIDL
- Set Matrix Zeroes
- 【项目管理和构建】十分钟教程,eclipse配置maven + 创建maven项目(三)
- Android下音频进行转码(一)
- 以管理员身份运行cmd
- Gradle For Android
- JAVA的反射机制
- Android网络编程之Socket
- 解决gdb 调试 core 文件函数名显示为问号的问题
- IIS各个版本中你需要知道的那些事儿