题目
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example,
Given the following matrix:
[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]
You should return [1,2,3,6,9,8,7,4,5]
.
直接模拟
代码:
class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
vector<int> ans;
int m=matrix.size(); //行数
if(m==0)
return ans;
int n=matrix[0].size(); //列数
int x1=0,y1=0,x2=0,y2=n-1,x3=m-1,y3=n-1,x4=m-1,y4=0; //顺时针一圈4个角的位置
int i;
while(1)
{
if(y1<=y2) //y递增
{
for(i=y1;i<=y2;i++)
ans.push_back(matrix[x1][i]);
x1++;
y1++;
x2++;
}
else break;
if(x2<=x3) //x递增
{
for(i=x2;i<=x3;i++)
ans.push_back(matrix[i][y2]);
y2--;
y3--;
}
else break;
if(y3>=y4) //y递减
{
for(i=y3;i>=y4;i--)
ans.push_back(matrix[x3][i]);
x3--;
x4--;
}
else break;
if(x4>=x1) //x递减
{
for(i=x4;i>=x1;i--)
ans.push_back(matrix[i][y4]);
y4++;
}
else break;
}
return ans;
}
};