题目链接
题意:
从外向内顺时针螺旋形输出一个矩阵
思路:
将上下左右四条边作为四个不同的操作单独处理,并动态记录边界
代码:
/*
Author Owen_Q
*/
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
int M = matrix.size();
vector<int> re;
if(M==0)
return re;
int N = matrix[0].size();
int p = 0;
int left = 0;
int right = N-1;
int up = 0;
int down = M-1;
int posx = 0;
int posy = 0;
while(up<=down&&left<=right)
{
if(p==0)
{
for(int i=left;i<=right;i++)
re.push_back(matrix[posx][i]);
posy = right;
up++;
}
else if(p==1)
{
for(int i=up;i<=down;i++)
re.push_back(matrix[i][posy]);
posx = down;
right--;
}
else if(p==2)
{
for(int i=right;i>=left;i--)
re.push_back(matrix[posx][i]);
posy = left;
down --;
}
else
{
for(int i=down;i>=up;i--)
re.push_back(matrix[i][posy]);
posx = up;
left ++;
}
p = (p+1) % 4;
}
return re;
}
};