给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
输入: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]
思路:按照四个方向依次遍历:从左向右,从上向下,从右向左,从下向上。
vector<int> spiralOrder(vector<vector<int>>& matrix)
{
vector<int> res;
int n = matrix.size(), m = matrix[0].size();
int left = 0, right = m - 1, top = 0, bottom = n - 1;
while (1)
{
for (int i = left; i <= right; i++)
{
res.push_back(matrix[top][i]);
}
if (++top > bottom)
{
break;
}
for (int i = top; i <= bottom; i++)
{
res.push_back(matrix[i][right]);
}
if (--right < left)
{
break;
}
for (int i = right; i >= left; i--)
{
res.push_back(matrix[bottom][i]);
}
if (--bottom < top)
{
break;
}
for (int i = bottom; i >= top; i--)
{
res.push_back(matrix[i][left]);
}
if (++left > right)
{
break;
}
}
return res;
}