LintCode-矩阵归零
来源:互联网 发布:mac装win7怎么进入 编辑:程序博客网 时间:2024/04/30 23:46
给定一个m×n矩阵,如果一个元素是0,则将其所在行和列全部元素变成0。
需要在原地完成。
样例
给出一个矩阵[[1,2],[0,3]],返回[[0,2],[0,0]]
挑战
你是否使用了额外的空间?
一个直接的解决方案是使用O(MN)的额外空间,但这并不是一个好的方案。
一个简单的改进方案是使用O(M + N)的额外空间,但这仍然不是最好的解决方案。
你能想出一个常数空间的解决方案吗?
分析:若点(i,j)为0,则可以把(i,0),(0,j)标记为0,最后根据该标记把列和行设置为0,这样的设置会影响第一行和第一列,所以第一行和第一列需要提前判断好。
代码:
class Solution {public: /** * @param matrix: A list of lists of integers * @return: Void */ void setZeroes(vector<vector<int> > &matrix) { // write your code here int n = matrix.size(); if(n==0) return ; int m = matrix[0].size(); bool firstLine = false; bool firstColumn = false; for(int i=0;i<n;i++) if(matrix[i][0]==0) firstColumn=true; for(int i=0;i<m;i++) if(matrix[0][i]==0) firstLine = true; for(int i=1;i<n;i++) { for(int j=1;j<m;j++) { if(matrix[i][j]==0) { matrix[i][0]=0; matrix[0][j]=0; } } } for(int i=1;i<n;i++) { if(matrix[i][0]==0) { for(int j=0;j<m;j++) matrix[i][j]=0; } } for(int i=1;i<m;i++) { if(matrix[0][i]==0) { for(int j=0;j<n;j++) matrix[j][i]=0; } } if(firstLine) for(int i=0;i<m;i++) matrix[0][i]=0; if(firstColumn) for(int i=0;i<n;i++) matrix[i][0]=0; }};
0 0
- LintCode-矩阵归零
- LintCode: 矩阵归零
- 矩阵归零-LintCode
- lintcode-矩阵归零
- lintcode-矩阵归零-162
- LintCode 162-矩阵归零
- [Lintcode] Set Matrix Zeroes矩阵归零
- lintcode刷题——矩阵归零
- 矩阵归零
- 矩阵归零
- 矩阵归零
- 矩阵归零
- 矩阵归零
- 矩阵归零
- 矩阵归零
- Java实现-矩阵归零
- 矩阵归零消减序列和
- 【Openjudge】矩阵归零消减序列和
- other linker flags objc配置
- 配置文件 DecodingRefreshType 参数讲解
- 【leetcode】Combination Sum
- 1 ubuntu14.04无线上网问题
- 五、单例模式
- LintCode-矩阵归零
- PAT(Advanec Level) 1093. Count PAT's (25)
- rocketmq使用的系统参数(dirty_background_ration dirty_ratio)
- OpenGL入门 & VS2012 配置使用 OpenGL gult库
- 欢迎使用CSDN-markdown编辑器
- 使用socket实现简单的客户端和服务端通信(C#语言)
- Spring定时器
- 本地名称查询
- Linux下mysql的备份和恢复