LeetCode_Set Matrix Zeroes
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
很挫的一个想法: 使用O(M+N)的space
class Solution {
public:
void setZeroes(vector<vector<int> > &matrix) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int m = matrix.size();
int n = matrix[0].size();
if(m < 1 || n < 1) return ; bool *row = new bool[m];
bool *column = new bool[n];
memset(row, 0, sizeof(bool)*m);
memset(column, 0, sizeof(bool)*n); for(int i = 0; i< m; i++)
for(int j = 0; j< n ; j++)
if(matrix[i][j] == 0){
row[i] = true;
column[j] = true;
} for(int i = 0; i < m; i++)
for(int j = 0; j < n; j++)
if(row[i]||column[j])
matrix[i][j] = 0; delete []row;
delete []column;
}
};
比较好的一个思路:常数空间的话,第一可以考虑是不是固定数量的几个变量能搞定;否则可以考虑是不是问题本身已经提供了足够的空间。
这道题属于后者,就是利用矩阵的第一行和第一列来作为辅助空间使用。不用开辟新的存储空间。方法就是:
1.先确定第一行和第一列是否需要清零
即,看看第一行中是否有0,记下来。也同时记下来第一列中有没有0。
2.扫描剩下的矩阵元素,如果遇到了0,就将对应的第一行和第一列上的元素赋值为0
这里不用担心会将本来第一行或第一列的1改成了0,因为这些值最后注定要成为0的。
3.根据第一行和第一列的信息,已经可以将剩下的矩阵元素赋值为结果所需的值了
即,拿第一行为例,如果扫描到一个0,就将这一列都清0.
4.根据1中确定的状态,处理第一行和第一列。
如果最开始得到的第一行中有0的话,就整行清零。同理对列进行处理。
class Solution {
public:
void setZeroes(vector<vector<int> > &matrix) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int m = matrix.size();
int n = matrix[].size();
if(m < || n < ) return ; bool zeroR = false, zeroC = false;
//set zeroR
for(int i = ; i< n ; i++)
if(matrix[][i] == ){
zeroR = true;
break;
}
//set zeroC
for(int i = ; i < m; i++)
if(matrix[i][] == ){
zeroC = true;
break;
}
//scan others
for(int i = ; i< m; i++)
for(int j = ; j< n ; j++)
if(matrix[i][j] == ){
matrix[i][] = ;
matrix[][j] = ;
}
// set others
for(int i = ; i < m; i++)
for(int j = ; j < n; j++)
if(matrix[i][] == ||matrix[][j] == )
matrix[i][j] = ;
//set zero row
if(zeroR){
for(int i = ; i< n;i++)matrix[][i] = ;
} //set zero clumn
if(zeroC){
for(int i = ; i< m ;i++) matrix[i][] = ;
}
}
};
LeetCode_Set Matrix Zeroes的更多相关文章
- 55. Set Matrix Zeroes
Set Matrix Zeroes (Link: https://oj.leetcode.com/problems/set-matrix-zeroes/) Given a m x n matrix, ...
- [CareerCup] 1.7 Set Matrix Zeroes 矩阵赋零
1.7 Write an algorithm such that if an element in an MxN matrix is 0, its entire row and column are ...
- Leetcode 细节实现 Set Matrix Zeroes
Set Matrix Zeroes Total Accepted: 18139 Total Submissions: 58671My Submissions Given a m x n matrix, ...
- LeetCode: Set Matrix Zeroes 解题报告
Set Matrix ZeroesGiven a m x n matrix, if an element is 0, set its entire row and column to 0. Do it ...
- 【LeetCode】73. Set Matrix Zeroes (2 solutions)
Set Matrix Zeroes Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do i ...
- LeetCode解题报告—— Rotate List & Set Matrix Zeroes & Sort Colors
1. Rotate List Given a list, rotate the list to the right by k places, where k is non-negative. Exam ...
- 【leetcode】Set Matrix Zeroes(middle)
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. 思路:不能用 ...
- Set Matrix Zeroes leetcode java
题目: Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. cl ...
- LeetCode 笔记系列15 Set Matrix Zeroes [稍微有一点hack]
题目:Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. Fol ...
随机推荐
- CCI_chapter 3 Stacks and Queues
3.1Describe how you could use a single array to implement three stacks for stack 1, we will use [0, ...
- Qt创建和使用动态链接库
一.创建共享库 1.新其他建项目,选择C++库 2.选择共享库,并取项目名称,单击下一步.这里取名位mylib 3.按默认配置单击下一步至模块选项,选择所需支持的模块.这里勾选Qtcore和QtGui ...
- Teach Yourself Scheme in Fixnum Days 13 Jump跳转
Jumps One of the signal features of Scheme is its support for jumps or nonlocal control. Specificall ...
- StroyBoard中UICollectionView中添加Header和footer
到Storyboard中,选择collection view controller中的"Collection View".在Attributes inspector中,选择&quo ...
- Go程序GC优化经验分享
http://1234n.com/?post/yzsrwa 最近一段时间对<仙侠道>的服务端进行了一系列针对GC的调优,这里跟各位分享一下调优的经验. 游戏第一次上线的时候,大部分精力都投 ...
- Java第四周学习日记
Day01 双列集合: 在现实生活中有些数据是以映射关系存在的,也就是成对存在的,比如夫妻等.单例集合无法表现出映射关系,所以学习双列集合. 双列集合无迭代器. 1.Map 双列集合: ——————— ...
- CocoaPods的一些理解
在这片博客中,我将分享我从cocopods中学到的东西. 如果你使用Cocoapods,你的.gitignore文件中会有什么. 这个问题在debate on SO中被提及,但是我建议只追踪Podfi ...
- sqlite命令
.databases //显示所有数据库 .tables //显示所有表 .schema test //显示创建 test 表的 sql 语句 )备份和还原数据库 .backup E:/db/Stud ...
- eclipse项目转android studio详解
第一步:项目导入 向AS中导入项目的方法有两种(其实是一种). 方法一:是在eclipse中先导出为gradle(如图1),然后打开AS,找到项目中的gradle文件,直接导入. 方法二:直接在AS中 ...
- 需求管理(REQM,Requirements Management)工具(转)
需求管理(REQM,Requirements Management)属于成熟度2级(受管理级)的过程域,是其他许多过程域实施的前提.对于暂未实施CMMI的企业,同样也可以借鉴CMMI的原则,实施和优化 ...