给定一个正整数 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; } };
