class Solution {
public:
    vector<int> spiralOrder(vector<vector<int> > &matrix) {
                vector<int> arr;
        if(matrix.size()==0)
            return arr;
        int m=matrix.size();
        int n=matrix[0].size();

        //m行n列的矩阵
        //采用分圈处理法
        int x1=0,y1=0,x2=m-1,y2=n-1;
        while(x1<=x2&&y1<=y2){
            //如果只有一行
            if(x1==x2){
                for(int i=y1;i<=y2;i++)
                    arr.push_back(matrix[x1][i]);
            }
            //如果只有一列
            else if(y1==y2){
                for(int i=x1;i<=x2;i++)
                    arr.push_back(matrix[i][y1]);
            }
            //否则的话螺旋打印
            else{
                //从左往右
                int i=x1,j=y1;
                while(j<=y2){
                    arr.push_back(matrix[i][j]);
                    j++;
                }
                //从上往下
                i=x1+1;
                j=y2;
                while(i<=x2){
                    arr.push_back(matrix[i][j]);
                    i++;
                }
                //从右往左
                j=y2-1;
                i=x2;
                while(j>=y1){
                    arr.push_back(matrix[i][j]);
                    j--;
                }
                //从下往上
                i=x2-1;
                j=y1;
                while(i>x1){
                    arr.push_back(matrix[i][j]);
                    i--;
                }
            }
            x1++;y1++;
            x2--;y2--;
        }
        return arr;
    }
};