本文字数:678 字
阅读完需:约 2 分钟
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地算法 。
m x n
题目链接:矩阵置零
输入: matrix = [[1,1,1],[1,0,1],[1,1,1]]输出: [[1,0,1],[0,0,0],[1,0,1]]
输入: matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出: [[1,0,1],[0,0,0],[1,0,1]]
输入: 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]]
输入: 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
1.数组
2.建议用时15~25min
这是一道考察数组思维逻辑的题目,对于一开始给定数组先进行循环判断。
如果位置包含 0,那么要记录下这个位置,用什么记录呢?
我们可以单独构造两个数组
vector<int>row(m),col(n);//行、列数组
存储 0 位置,这一整行、列的数据。
最后再遍历一下当前元素所在的行、列,如果发现row[i]或者col[j]等于 1,那么将元素置为 0 就行了。
row[i]或者col[j]
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; } } } }};
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
int i,j,p=0,m=matrix.size(),n=matrix[0].size();//初始化数据
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
if(row[i]||col[j])
matrix[i][j]=0;
};
版权声明: 本文为 InfoQ 作者【知心宝贝】的原创文章。
原文链接:【http://xie.infoq.cn/article/82b31577e875a388b1456fa59】。文章转载请联系作者。
公众号:穿越计算机的迷雾 2022-03-07 加入
生于尘埃 溺于人海 死于理想高台
评论