LeetCode 73. Set Matrix Zeroes
来源:互联网 发布:dts播放器 for mac 编辑:程序博客网 时间:2024/06/01 08:13
Description
Given a m x 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?
Analysis
题意是对任何含0元素的行或列整体置0。
本身是一道简单的题,Follow up中提到了很容易想到的两种思路:
- O(mn):存一份矩阵的副本,然后遍历该副本(因为题目中函数参数传递的是引用,所以直接该原矩阵比较方便),碰到0元素就将原矩阵中的对应行列全部置0。
- O(m+n):开一个bool数组,元素共m+n个,存储第m行(或第n列)是否含0,然后根据该数组对原矩阵置0。
但题目要求我们调整到常数的空间复杂度。实际上,O(m+n)的方法提示我们,我们只需要这m+n个bit就可以正确置0该矩阵,那么可以考虑直接将这些信息存入矩阵,为了方便我选取了第0行和第0列。那么思路如下:
- 先遍历第0行和第0列,确定其中是否含0,用布尔型变量
l0
和c0
记录; - 遍历矩阵剩余元素,若发现0,则在
(对应行,0)
和(0,对应列)
处用0记录; - 遍历第0行和第0列,若为0,则将对应行/列全部置0;
- 查看
l0
和c0
,若含0,则对应对第0行或第0列置0。
Code
class Solution {public: void setZeroes(vector<vector<int>>& matrix) { int c = matrix[0].size(), l = matrix.size(), i, j; bool l0 = false, c0 = false; for (i = 0; i < l; i++) if (matrix[i][0] == 0){ l0 = true; break; } for (j = 0; j < c; j++) if (matrix[0][j] == 0){ c0 = true; break; } for (i = 1; i < l; i++) for (j = 1; j < c; j++){ if (matrix[i][j] == 0){ matrix[0][j] = 0; matrix[i][0] = 0; } } for (i = 1; i < l; i++) if (matrix[i][0] == 0) for (j = 1; j < c; j++) matrix[i][j] = 0; for (j = 1; j < c; j++) if (matrix[0][j] == 0) for (i = 1; i < l; i++) matrix[i][j] = 0; if (l0){ for (i = 0; i < l; i++) matrix[i][0] = 0; } if (c0){ for (j = 0; j < c; j++) matrix[0][j] = 0; } }};
Appendix
- Link: https://leetcode.com/problems/set-matrix-zeroes/
- Run Time: 53ms
0 0
- [LeetCode]73.Set Matrix Zeroes
- LeetCode --- 73. Set Matrix Zeroes
- [Leetcode] 73. Set Matrix Zeroes
- [leetcode] 73.Set Matrix Zeroes
- 【leetcode】73. Set Matrix Zeroes
- [leetcode] 73. Set Matrix Zeroes
- Leetcode 73. Set Matrix Zeroes
- LeetCode 73. Set Matrix Zeroes
- LeetCode 73. Set Matrix Zeroes
- 73. Set Matrix Zeroes LeetCode
- [LeetCode]73. Set Matrix Zeroes
- [LeetCode]73. Set Matrix Zeroes
- leetcode 73. Set Matrix Zeroes
- LeetCode 73. Set Matrix Zeroes
- LeetCode *** 73. Set Matrix Zeroes
- leetcode 73. Set Matrix Zeroes
- [LeetCode]73. Set Matrix Zeroes
- LeetCode-73. Set Matrix Zeroes
- Centos配置国内yum源
- 工作休息时间,保健运动
- 关于Java代码块的小小细节
- 有关strcpy与strlen的实现
- php window环境下扩展memcached实现页面缓存
- LeetCode 73. Set Matrix Zeroes
- markdown使用说明
- 2.1.2微信小程序可滚动视图区域 scroll-view
- unet 学习笔记 (一)
- Android usb学习笔记:Android AOA协议Android端 流程总结
- hdu1026 Ignatius and the Princess I(bfs+优先队列+记录路径)
- cookie和session的区别
- Restful风格API接口开发springMVC篇
- ubuntu下使用jsoncpp例子