题目描述
给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1
输出:[[1]]
题解
这题处理每条边时要遵循相同的一个原则 类似于集合中的左闭右开 左闭右闭
在做这道题时最好是留这个边的最后一个元素给下一条边处理(如图,来自代码随想录)
cpp
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>>re (n,vector<int>(n));
int loop=n/2; //一共有n/2圈
int startX=0,startY=0,offset=1,count=1,i,j;
while(loop--){
//依次处理四条边
for(j=startY;j<n-offset;j++){
re[startX][j]=count++;
}
for(i=startX;i<n-offset;i++){
re[i][j]=count++;
}
for(;j>startY;j--){
re[i][j]=count++;
}
for(;i>startX;i--){
re[i][startY]=count++;
}
startX++;
startY++;
offset++;
}
//如果是奇数的话还要额外处理最中间那个元素
if(n%2==1){
re[n/2][n/2]=n*n;
}
return re;
}
};