给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/spiral-matrix-ii
题解:通过递归求解,递归每层将一圈填好,下次递归往进缩一圈;
填一圈时,为了好填,我每次填 当前方阵的的减一;这样,四周都呈现出一致规律,方阵大小也要每次见二。
class Solution {
public:
vector<vector<int>>v;
void dfs(int x,int y,int len,int num,int n){
if(!len){ // 初始矩阵边长为奇数
v[x][y]=num;
return ;
}
for(int i=y;i-y<len;i++) // 填上边
v[x][i]=num++;
for(int i=x;i-x<len;i++) // 填右边
v[i][n-1-x]=num++;
for(int i=n-1-x;(n-1-x-i)<len;i--) // 填下边
v[n-1-x][i]=num++;
for(int i=n-1-x;(n-1-x-i)<len;i--) // 填左边
v[i][y]=num++;
if(len==1) return ; // 初始矩阵边长为偶数
dfs(x+1,y+1,len-2,num,n); // 缩小矩阵
}
vector<vector<int>> generateMatrix(int n) {
for(int i=0;i<n;i++){
vector<int>vect;
for(int j=0;j<n;j++) vect.push_back(0);
v.push_back(vect);
}
dfs(0,0,n-1,1,n);
return v;
}
};