当前位置:网站首页>【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;
}
}
}
};
边栏推荐
- Build finished with errors/Executable Not Found
- Emotional crisis, my friend's online dating girlfriend wants to break up with him, ask me what to do
- Kotlin入门介绍篇
- [ verb phrase ] collection
- 来n遍剑指--09. 用两个栈实现队列
- 初识二叉搜索树
- NowCoderTOP17-22 Binary search/sort - continuous update ing
- Canvas particles change various shapes js special effects
- 第七章
- spark过滤器
猜你喜欢
随机推荐
【微信小程序开发】生命周期与生命周期函数
【职场杂谈】售前工程师岗位的理解杂谈
解决rpc error: code = Unimplemented desc = method CheckLicense not implemented
踩水坑2 数据超出long long
VMware下安装win10启动后进入Boot Manger界面如何解决
nodeJs--url模块
【23提前批】北森云计算-测开面经
Source code analysis of GZIPInputStream class
小程序如何使用订阅消息(PHP代码+小程序js代码)
js radar chart statistical chart plugin
SQLite3交叉编译
Echart饼图添加轮播效果
零代码工具推荐 八爪鱼采集器
Web系统常见安全漏洞介绍及解决方案-sql注入
Kotlin—基本语法 (五)
可以用聚酯树脂将接线板密封接线盒吗?(接线盒灌封胶用哪种树脂)
Come n times - 06. Print the linked list from end to end
恋爱期间的赠与能否撤销
Qt 编译错误:C2228: “.key”的左边必须有类/结构/联合
js department budget and expenditure radar chart









