给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
思路:按照右、下、左、上的顺序遍历数组,并使用四个变量圈定未遍历元素的边界,
随着螺旋遍历,相应的边界会收缩,直到螺旋遍历完整个数组
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix)
{
int m=matrix.size();
int n=matrix[0].size();
int up=0,low=m-1;
int left=0,right=n-1;
vector<int> v;
while(v.size()<m*n)
{
if(up<=low)
{
for(int j=left;j<=right;j++)
{
v.push_back(matrix[up][j]);
}
up++;
}
if(left<=right)
{
for(int j=up;j<=low;j++)
{
v.push_back(matrix[j][right]);
}
right--;
}
if(up<=low)
{
for(int j=right;j>=left;j--)
{
v.push_back(matrix[low][j]);
}
low--;
}
if(left<=right)
{
for(int j=low;j>=up;j--)
{
v.push_back(matrix[j][left]);
}
left++;
}
}
return v;
}
};