如何解决呢?用偏移量法:可能理解上有点小麻烦
。力扣上面虽然很多关于题解的,但是我感觉边界性太强了。我不太推荐。
怎么使用偏移量法呢?设置方向,螺旋数组是一个顺序的方向。我们定义一个偏移量,attention:这个和dfs的那么迷宫不太一样。顺序访问:右下左上。
int dx[]={0,1,0,-1},dy[]={1,0,-1,0}.
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
//先把数字给生成
vector<vector<int>> res(n,vector<int>(n));
//if(!n) return res;
int dx[]={0,1,0,-1},dy[]={1,0,-1,0};//右下左上
for(int i=1,x=0,y=0,d=0;i<=n*n;i++){
res[x][y]=i;
int a=x+dx[d],b=y+dy[d];
//偏移量进行行走
if(a<0||a>=n||b<0||b>=n||res[a][b]){
d=(d+1)%4;
a=x+dx[d],b=y+dy[d];
}
x=a,y=b;
}
return res;
}
};