https://leetcode.cn/problems/spiral-matrix-ii/description/
思路
模拟法,每条边遵循左开右闭
code
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> res(n,vector<int>(n)); //二维数组初始化
int loop=n/2; //循环圈数
int mid = n/2;//矩阵中间的数
int k=1; //控制圈的边长收缩
int val=1; //
int x=0,y=0; //起点
while(loop--){
int i=x,j=y;
//从左到右
for(j=y;j<n-k;j++){
res[i][j]=val;
val++;
}
//从上到下
for(i=x;i<n-k;i++){
res[i][j]=val++;
}
//从右到左
for(;j>y;j--){
res[i][j]=val++;
}
//从下到上
for(;i>x;i--){
res[i][j]=val++;
}
x++;
y++;
k++;
}
if(n%2) res[mid][mid]=val;
return res;
}
};