定义四个边界,逐渐变小,主要要以上和左作为基准,以及时时刻刻都要缩小边界,最后到中点的时候返回就行,执行顺序,是上,右,下,左。

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;

        }

};