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

输入:n = 3输出:[[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;
}
};
