螺旋矩阵(NC38/考察次数Top27/难度入门)
Posted 码农指南
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了螺旋矩阵(NC38/考察次数Top27/难度入门)相关的知识,希望对你有一定的参考价值。
描述:
给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。
示例1
输入:
[[1,2,3],[4,5,6],[7,8,9]]
返回值:
[1,2,3,6,9,8,7,4,5]
class Solution{
public:
vector<int> spiralOrder(vector<vector<int> > &matrix){ //矩阵可以使用嵌套的两个vector来使用,此处为定义函数
vector<int> result; //定义一个与函数同类型的变量用来作为函数的返回值
if(matrix.size()==NULL)
{
return result;
}
int i, left=0, right=matrix[0].size()-1, top=0, down=matrix.size()-1; //定义一下左、右以及上、下的边界线
while(left<=right&&top<=down){ //循环进行的条件
for(i=left;i<=right;i++)
result.push_back(matrix[top][i]); //将top排数据pash_back到result里面(注意vector使用push_back插入)
top++; //插值完后,top++
for(i=top;i<=down;i++)
result.push_back(matrix[i][right]); //将right排数据push_back到result里面
right--; //插值完后right--
//内部循环进行时其实都是满足条件的,只是上面
//进行了top++,right--的操作,为了防止同排或者同列处理两次,需要进行判断
if(top<=down) //条件判断,防止同排算入两次
for(i=right;i>=left;i--)
result.push_back(matrix[down][i]); //将down排数据push_back到result里面
down--; //插值完后down--
if(left<=right) //条件判断,防止同列算入两次
for(i=down;i>=top;i--)
result.push_back(matrix[i][left]); //将left排数据push_back到result里面
left++; //插值完后进行left++
}
return result;
}
};
纯手撕代码,如果觉得内容不错麻烦点个赞,后面陆续配上Top100算法题通俗易懂的讲解视频,可以花两个月时间完全掌握,进大厂不是梦,转行狗亲测!
以上是关于螺旋矩阵(NC38/考察次数Top27/难度入门)的主要内容,如果未能解决你的问题,请参考以下文章