给你一个正整数 n ,生成一个包含 1n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix

    示例 1:

    59螺旋矩阵II - 图1

    1. 输入:n = 3
    2. 输出:[[1,2,3],[8,9,4],[7,6,5]]

    示例 2:

    输入:n = 1
    输出:[[1]]
    

    提示:

    • 1 <= n <= 20
    class Solution {
    public:
        vector<vector<int>> generateMatrix(int n) {
            vector<vector<int>> res(n,vector<int> (n,0)); //初始化一个n*n数组并全部赋值为0
            int loop=n/2; //循环的圈数,n为奇数时需要对中间值单独赋值
            int cout=1;//递增赋值
            int x=0,y=0;//每一次循环的起点坐标
            int linelen=1; //每一次循环结束后下一次的循环边长就减少2
            int mid=n/2; //中间位置坐标,n为奇数时最后赋值用
            while (loop--){//学会这样写,不用在循环内--
                int i=x,j=y;//初始化每一次循环起点坐标
    
                for ( j = x; j <x+n-linelen ; j++) //从左到右,左闭右开
                {
                    res[i][j]=cout++;
                }
    
                for ( i = y; i <y+n-linelen ; i++) //从上到下,左闭右开
                {
                    res[i][j]=cout++;
                }
    
                for ( j=x+n-linelen; j>x ; j--) //从右到左,左闭右开
                {
                    res[i][j]=cout++;
                }
    
                for ( i=y+n-linelen; i>y ; i--) //从下到上,左闭右开
                {
                    res[i][j]=cout++;
                }
                //更新下一次循环起点以及下一个循环变长
                x++;
                y++;
                linelen+=2;
            }
    
            if((n%2)!=0){
                //奇数情况单独中间赋值
                res[mid][mid]=cout; //最后一个cout
            }
    
            return res;
    
        }
    };