给你一个正整数 n ,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的 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));
int startx=0,starty=0;//定义每循环一圈的起始位置
int j,i;//循环中的变量
int mid=n/2;//矩阵中间的位置,如n为3,则中间位置为【1,1】
int loop=n/2;//一个矩阵要循环几圈
int count=1;//循环空格赋值,做标记
int offset=1;//每循环一圈要控制的遍历长度
while(loop--){
i=startx;
j=starty;
//下面4个for循环代表循环一圈
//注意这里用的是[左闭右开)
for(j=starty;j<starty+n-offset;j++){
res[startx][j]=count++;
}
//注意这里用的是[上闭下开)
for(i=startx;i<startx+n-offset;i++){
res[i][j]=count++;
}
//注意这里用的是[右闭左开)
for(;j>starty;j--){
res[i][j]=count++;
}
//注意这里用的是[下闭上开)
for(;i>startx;i--){
res[i][j]=count++;
}
startx++;//遍历结束一圈,起点位置加一
starty++;//遍历结束一圈,起点位置加一
offset+=2;//遍历结束一圈,控制长度加二
}
if(n%2){
res[mid][mid]=count;//中间值加入数组
}
return res;
}
};