class Solution {
public int[][] generateMatrix(int n) {
int[][] ans=new int[n][n];
cricle(0,0,n-1,n-1,1,ans);
return ans;}
void cricle(int x1,int y1,int x2,int y2,int start, int[][]ans){
if(x2<x1 || y2<y1) {
return ;
}
else if(x1==x2) {
ans[x1][y1]=start;
return ;
}
int val=start;
for(int i=y1;i<y2;i++) ans[x1][i]=val++;
for(int i=x1;i<x2;i++) ans[i][y2]=val++;
for(int i=x2;i>x1;i--) ans[x2][i]=val++;
for(int i=y2;i>y1;i--) ans[i][y1]=val++;
cricle(x1+1,y1+1,x2-1,y2-1,val, ans);
}
}
先贴代码
当看到这个题没思路的时候不妨多举几个例子,举n=4,5时候的情况,因为我现在画图软件还没开始用,就手写一下(之后会开始用的) 可以看到,其实就是遍历几个类似正方形的东西,等到只剩一个的时候把单独的那个填进去就可以了,这时候就结束了,这明显就是一个递归啊
可以看到,其实就是遍历几个类似正方形的东西,等到只剩一个的时候把单独的那个填进去就可以了,这时候就结束了,这明显就是一个递归啊。代码实现,不会的函数查就好了。
ans[x1][i]=val++; 等同于ans[x1][i]=val; val++;