class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix)
{
vector<int> ret;
int m=matrix.size();
if(m==0)
return ret;
int n=matrix[0].size();
int rowl=0;
int rowh=m-1;
int coll=0;
int colh=n-1;
while(rowl<rowh&&coll<colh)
{
for(int i=coll;i<colh;i++)
ret.push_back( matrix[rowl][i] );
for(int i=rowl;i<rowh;i++)
ret.push_back( matrix[i][colh] );
for(int i=colh;i>coll;i--)
ret.push_back( matrix[rowh][i] );
for(int i=rowh;i>rowl;i--)
ret.push_back( matrix[i][coll]);
rowl++;
rowh--;
coll++;
colh--;
}
if (colh>coll&&rowl==rowh)
{
for (int i = coll; i <= colh; i++)
{
ret.push_back(matrix[rowl][i]);
}
}
if (rowh>rowl&&coll==colh)
{
for (int i = rowl; i <= rowh; i++)
{
ret.push_back(matrix[i][coll]);
}
}
if(rowl==rowh&&coll==colh)
{
ret.push_back(matrix[rowl][rowh]);
}
return ret;
}
};