class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param matrix int整型vector<vector<>>
     * @return int整型vector
     */
    vector<int> spiralOrder(vector<vector<int> >& matrix) {
        // write code here
        //有点像贪吃蛇的写法
        vector<int>ans;
        int n = matrix.size();
        if (n == 0)return ans;
        int up = 0, down = n - 1;
        int left = 0, right = matrix[0].size() - 1;

        while (left <= right && up <= right) {
            //--->
            for (int i = left; i <= right; i++) {
                ans.push_back(matrix[up][i]);
            }
            // |
            // |
            //\ /
            up++;
            if (up > down)break;
            for (int i = up; i <= down; i++) {
                ans.push_back(matrix[i][right]);
            }
            ////<---
            right--;
            if (left > right)break;
            for (int i = right; i >= left; i--) {
                ans.push_back(matrix[down][i]);
            }
            // / \
            //  |
            //  |
            down--;
            if (up > down)break;
            for (int i = down; i >= up; i--) {
                ans.push_back(matrix[i][left]);
            }
            left++;
            if (left > right)break;

        }
        return ans;
    }
};