看到这种题目,第一个想法还是递归.public static void p_3(int n){
p_3_0(1,n);
}
private static void p_3_0(int i ,int n){
if(i==n){p_3_1(i,n);return;}
p_3_1(i,n);
p_3_0(i+1,n);
p_3_1(i,n);
}
private static void p_3_1(int i,int n){
p_3_2(n-i);
p_3_3(1,i);
System.out.println();
}
private static void p_3_2(int n){
System.out.print(' ');
if(n>0)p_3_2(n-1);
}
private static void p_3_3(int i,int n){
if(n==i){System.out.print(i);return;}
System.out.print(i);
p_3_3(i+1,n);
System.out.print(i);
}
如果搞个额外空间来保存位置的话,代码可以漂亮点,DFS,BFS之类的.public static void p_2(int n){
int [][] d = new int[2*n-1][2*n-1];
p_2_0(n, n-1, n-1, d);
print(d);
}
private static void p_2_0(int n , int x ,int y,int [][]d){
if(d[x][y]
if(n>1){p_2_0(n-1,x-1,y,d);p_2_0(n-1,x,y-1,d);p_2_0(n-1,x+1,y,d);p_2_0(n-1,x,y+1,d);}
}
private static void print(int [][]d){
for(int i=0;i
for(int j =0 ;j
System.out.print(d[j][i]==0?" ":d[j][i]);
}
System.out.println();
}
}
改成循环也不错,还符合OP要求.public static void p_1(int n){
int [][] d = new int[2*n-1][2*n-1];
int x=n-1,y=n-1;
for(int i =0 ;i
for(int j = 0 ; j<=i;j++){
d[x+j][y+(i-j)]=(n-i);
d[x+-1*j][y+-1*(i-j)]=(n-i);
d[x+-1*j][y+(i-j)]=(n-i);
d[x+j][y+-1*(i-j)]=(n-i);
}
}
print(d);
}
期待漂亮的递归写法.