定义四个边界,逐渐变小,主要要以上和左作为基准,以及时时刻刻都要缩小边界,最后到中点的时候返回就行,执行顺序,是上,右,下,左。
class Solution { public: vector<int> spiralOrder(vector<vector<int> > &matrix) { vector<int> result; if(matrix.size()==0){ return result; } int top = 0, bottom = matrix.size()-1; int left = 0 , right = matrix[0].size()-1; while(top<(matrix.size()+1)/2&& left < (matrix[0].size()+1)/2){ //top for(int i = left; i<=right;i++){ result.emplace_back(matrix[top][i]); } //right for(int i = top +1; i <=bottom;i++){ result.emplace_back(matrix[i][right]); } //bottom for(int i = right-1;i>=left&&bottom!=top;i--){ result.emplace_back(matrix[bottom][i]); } //left for(int i = bottom-1; i>=top +1 && left!= right ;i--){ result.emplace_back(matrix[i][left]); } top++; bottom--;left++;right--; } return result; } };