一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第14天,点击查看活动详情。
一、问题描述
给定一个 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]]
复制代码
考察
1.数组
2.建议用时15~25min
复制代码
三、问题分析
这是一道考察数组思维逻辑的题目,对于一开始给定数组先进行循环判断。
如果位置包含0,那么要记录下这个位置,用什么记录呢?
我们可以单独构造两个数组
vector<int>row(m),col(n);//行、列数组
复制代码
存储0位置,这一整行、列的数据。
最后再遍历一下当前元素所在的行、列,如果发现row[i]或者col[j]
等于1,那么将元素置为0就行了。
四、编码实现
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
int i,j,p=0,m=matrix.size(),n=matrix[0].size();//初始化数据
vector<int>row(m),col(n);//行、列数组
for(i=0;i<m;i++)//遍历求解位置
{
for(j=0;j<n;j++)
{
if(matrix[i][j]==0)
{
row[i]=col[j]=1;//暂存行、列
}
}
}
for(i=0;i<m;i++)//之前记录位置的行、列置为0
{
for(j=0;j<n;j++)
{
if(row[i]||col[j])
{
matrix[i][j]=0;
}
}
}
}
};
复制代码
五、测试结果
扫描二维码关注公众号,回复:
13789870 查看本文章