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; } };