class Solution {
public:
    vector<int> spiralOrder(vector<vector<int> >& matrix) {
        vector<int> ans;
        if(matrix.size() == 0)
            return ans;
        int startrow = 0, row = matrix.size(), col = matrix[0].size();
        int num = row * col;  //计算数字总数
        int startcol = 0, circle = 0;  //circle记录圈数
        while (num) {
            circle++;
            for (int i = startcol; i < col - circle; ++i) {
                ans.push_back(matrix[startrow][i]);
                num--;
            }
            startcol = col - circle;
            for (int i = startrow; num && i < row - circle; ++i) {
                ans.push_back(matrix[i][startcol]);
                num--;
            }
            startrow = row - circle;
            for (int i = startcol; num && i >= circle - 1; --i) {
                ans.push_back(matrix[startrow][i]);
                num--;
            }
            startrow--;
            startcol = circle - 1;
            for (int i = startrow; num && i >= circle; --i) {
                ans.push_back(matrix[i][startcol]);
                num--;
            }
            startrow = circle;
            startcol = circle;
        }
        return ans;
    }
};