class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix)
{
vector<int> res;
if(matrix.empty()||matrix[0].empty())
return res;
int m=matrix.size();
int n=matrix[0].size();
int layer=(min(m,n)+1)/2;
for(int i=0;i<layer;++i)
{
for(int j=i;j<n-i;++j)
res.push_back(matrix[i][j]);
for(int j=i+1;j<m-i;++j)
res.push_back(matrix[j][n-i-1]);
if(m-1-i>i)
{
for(int j=n-1-i-1;j>=i;--j)
res.push_back(matrix[m-i-1][j]);
}
if(n-1-i>i)
{
for(int j=m-1-i-1;j>i;--j)
res.push_back(matrix[j][i]);
}
}
return res;
}
};