class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> spiral;
if(matrix.size() == 0)
return spiral;
int m = matrix.size(), n = matrix[0].size(), i, j, k, c = 0;
for(i = m, j = n; i > 1 && j > 1; i -= 2, j -= 2)
{
for(k = c; k < j-1+c; k++)
spiral.push_back(matrix[m-i-c][k]);
for(k = c; k < i-1+c; k++)
spiral.push_back(matrix[k][j-1+c]);
for(k = j-1+c; k > c; k--)
spiral.push_back(matrix[i-1+c][k]);
for(k = i-1+c; k > c; k--)
spiral.push_back(matrix[k][n-j-c]);
c++;
}
if(i == 1)
{
for(k = c; k < j+c; k++)
spiral.push_back(matrix[m-i-c][k]);
}
else if(j == 1)
{
for(k = c; k < i+c; k++)
spiral.push_back(matrix[k][j-1+c]);
}
return spiral;
}
};