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) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<int> result;
int x = matrix.size();
if(x==0) return result;
int y = matrix[0].size();
int layer = min(x,y)/2;
for(int l = 0; l<layer; l++)
{
for(int i=l;i<y-l-1;i++)
{
result.push_back(matrix[l][i]);
}
for(int i=l;i<x-l-1;i++)
{
result.push_back(matrix[i][y-l-1]);
}
for(int i=y-l-1;i>l;i--)
{
result.push_back(matrix[x-l-1][i]);
}
for(int i=x-l-1;i>l;i--)
{
result.push_back(matrix[i][l]);
}
}
if(min(x,y)%2==1)
{
if(x>y)
{
for(int i=layer;i<=x-1-layer;i++)
{
result.push_back(matrix[i][y/2]);
}
}
else
{
for(int i=layer;i<=y-1-layer;i++)
{
result.push_back(matrix[x/2][i]);
}
}
}
return result;
}
};