class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
vector<int> res;
int m = matrix.size();
if(m == 0) return res;
int n = matrix[0].size();
int nRows = m;
int nCols = n;
int tmpR, tmpC;
for(;m > 0 && n > 0 && res.size() < nRows*nCols;m--,n--)
{
tmpR = nRows - m;
tmpC = nCols-n;
//从左至右
for(;tmpC < n && tmpR < m; tmpC++)
res.push_back(matrix[tmpR][tmpC]);
//从上至下
tmpC = n - 1;
tmpR = nRows - m + 1;
for(;tmpR < m && tmpC >= 0; tmpR++)
res.push_back(matrix[tmpR][tmpC]);
//从右向左
tmpR = m - 1;
tmpC = n - 2;
for(;tmpC >= (nCols - n) && tmpR > (nRows - m); tmpC--)
res.push_back(matrix[tmpR][tmpC]);
//从下至上
tmpC = nCols - n;
tmpR = m - 2;
for(;tmpR >= (nRows - m) + 1 && tmpC < (n - 1); tmpR--)
res.push_back(matrix[tmpR][tmpC]);
}
return res;
}
};