当前位置:网站首页>【LeetCode】73.矩阵置零
【LeetCode】73.矩阵置零
2022-07-31 10:03:00 【酥酥~】
题目
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。
示例 1:
输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[1,0,1],[0,0,0],[1,0,1]]
示例 2:
输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]
提示:
m == matrix.length
n == matrix[0].length
1 <= m, n <= 200
-231 <= matrix[i][j] <= 231 - 1
进阶:
一个直观的解决方案是使用 O(mn) 的额外空间,但这并不是一个好的解决方案。
一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。
你能想出一个仅使用常量空间的解决方案吗?
题解
设置两个一维数组row和col
遇到0则对其所在行列进行记录
最后更新
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
int m = matrix.size();
int n = matrix[0].size();
vector<bool> row(m,false);
vector<bool> col(n,false);
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(matrix[i][j]==0)
{
row[i] = true;
col[j] = true;
}
}
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(row[i] || col[j])
matrix[i][j]=0;
}
}
}
};
使用第一行和第一列来记录该行该列是否需要置零
同时使用两个变量记录第一行和第一列是否需要置零
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
int m = matrix.size();
int n = matrix[0].size();
bool flag_row0 = false;
bool flag_col0 = false;
for(int i=0;i<m;i++)//第一列是否需要置零
{
if(matrix[i][0]==0)
flag_col0 = true;
}
for(int j=0;j<n;j++)//第一行是否需要置零
{
if(matrix[0][j]==0)
flag_row0 = true;
}
for(int i=1;i<m;i++)//从(1,1)开始,遇到0则标记对零的行和列的第一个元素
{
for(int j=1;j<n;j++)
{
if(matrix[i][j]==0)
{
matrix[i][0] = matrix[0][j] = 0;
}
}
}
for(int i=1;i<m;i++)
{
for(int j=1;j<n;j++)
{
if(matrix[i][0]==0 || matrix[0][j]==0)
matrix[i][j]=0;
}
}
if(flag_row0)
{
for(int i=0;i<n;i++)
{
matrix[0][i] = 0;
}
}
if(flag_col0)
{
for(int i=0;i<m;i++)
{
matrix[i][0] = 0;
}
}
}
};
边栏推荐
- 让动画每次重复前都有延迟
- Come n times - 09. Implement queues with two stacks
- The future of the hybrid interface: conversational UI
- Android安全专题(三)JNI混淆
- Binary tree search and backtracking problem (leetcode)
- nodeJs--url模块
- 数字加分隔符
- 如何将虚拟机上的文件复制到主机上
- Meikle Studio--Hongmeng 14-day development training notes (8)
- cocoaPods管理之后工程结构变化
猜你喜欢
可以用聚酯树脂将接线板密封接线盒吗?(接线盒灌封胶用哪种树脂)
浅谈Attention与Self-Attention,一起感受注意力之美
Burndown chart of project management tools: Dynamic assessment of team work ability
loadrunner脚本--添加检查点
Module eight
loadrunner-controller-目标场景Schedule配置
Android安全专题(三)JNI混淆
Come n times - 07. Rebuild the binary tree
第五章
Rich text editor Tinymce
随机推荐
djangoWeb应用框架+MySQL数据4
恋爱期间的赠与能否撤销
loadrunner-controller-view script与load generator
js right dot single page scrolling introduction page
如何将虚拟机上的文件复制到主机上
[ verb phrase ] collection
js部门预算和支出雷达图
来n遍剑指--06. 从尾到头打印链表
nodeJs--querystring模块
loadrunner脚本--添加事务
What is the encoding that starts with &#x?
Echart饼图添加轮播效果
win10镜像下载
Burndown chart of project management tools: Dynamic assessment of team work ability
【微信小程序开发】生命周期与生命周期函数
初识二叉搜索树
比较并交换 (CAS) 原理
Flink1.15 source code reading flink-clients - flink command line help command
postgresql 生成随机日期,随机时间
Principle of Redis Sentinel