vector<int> spiralOrder(vector<vector<int> > &matrix) {
    if(matrix.empty()) return {};
    int a = matrix.size();
    int b = matrix[0].size();

    vector<int> result;
    int cicleNum = (min(a,b)+1)/2; //向下取整,代表循环几次

    int left = 0,top=0;
    int right = matrix[0].size()-1, bottom = matrix.size()-1;
    while(cicleNum--){ //顺时针
        for(int i = left;i<=right;i++)//从左到右
           result.push_back(matrix[top][i]);
        for(int j = top+1;j<=bottom;j++)//从上到下
            result.push_back(matrix[j][right]);
        for(int k = right-1;k>=left && top!=bottom;k--) //从右到左,注意 top!=bottom,防止重复
            result.push_back(matrix[bottom][k]);
        for(int l = bottom-1;l>top && left!=right;l--) //从下到上,注意 left!=right,防止重复
            result.push_back(matrix[l][left]);
        left++; right--; top++; bottom--;
    }
    return result;
}