一、题目
描述
给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。
示例1
输入:
[[1,2,3],[4,5,6],[7,8,9]]
返回值:
[1,2,3,6,9,8,7,4,5]
二、思路
1、定义四个变量,left、right、top、bottom,分别代表每一次螺旋的四个边界
2、while循环条件,top到中间那一行时就退出,left到中间那一列就退出
3、上:左上到右上,i=left,i<=right,++i
右:右上到右下,i=top+1,i<=bottom,++i
下:右下到左下,i=right-1,i>=top && top!=bottom,–i
左:左下到左上,,i=bootom-1,i>=top+1 && left!=right,–i
三、代码
class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
vector<int>res;
if(matrix.empty())
{
return res;
}
int left=0,right=matrix[0].size()-1;
int top=0,bottom=matrix.size()-1;
while(top<(matrix.size()+1)/2 && left<(matrix[0].size()+1)/2)
{
//上
for(int i=left;i<=right;++i)
{
res.emplace_back(matrix[top][i]);
}
//右
for(int i=top+1;i<=bottom;++i)
{
res.emplace_back(matrix[i][right]);
}
//下
for(int i=right-1;i>=left && top!=bottom;--i)
{
res.emplace_back(matrix[bottom][i]);
}
//左
for(int i=bottom-1;i>=top+1 && left!=right;--i)
{
res.emplace_back(matrix[i][left]);
}
top++,bottom--,left++,right--;
}
return res;
}
};