1. 题目描述
给你一个 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]
2. 解题思路
首先定义左指针left、右指针right,上指针top,下指针bottom,然后从左到右,从上到下遍历,遇到边界的时候指针相应地变化。
3. 代码实现
cpp
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
int left = 0;
int top = 0;
int right = matrix[0].size()-1;
int bottom = matrix.size()-1;
vector<int> ans;
while(left <= right || top <= bottom)
{
for (int i = left; i <= right; i++)
{
ans.push_back(matrix[top][i]);
}
top++;
if (top > bottom) break;
for (int i = top; i <= bottom; i++)
{
ans.push_back(matrix[i][right]);
}
right--;
if (right < left) break;
for (int i = right; i >= left; i--)
{
ans.push_back(matrix[bottom][i]);
}
bottom--;
if (bottom < top) break;
for (int i = bottom; i >= top; i--)
{
ans.push_back(matrix[i][left]);
}
left++;
if (left > right) break;
}
return ans;
}
};