因为是n*n的二维数组,所以将其看作是行列式,利用坐标赋值
观察打印的结果可以看出,每一圈的个数是(n-1)*4,上下左右每一行的个数是n-1,然后赋值完之后行坐标和列坐标a,b会回到起始点,所以每次进入内圈的时候都定义了起始点,因此在第一次赋值的时候接受的坐标参数是-1和-1
- public static void show(int num){
- //定义二维数组
- int[][] arr = new int[num][num];
-
- //定义坐标
- int a = -1 , b = -1;
-
- //定义count
- int count = 1;
-
- //定义外圈的一行或者一列的个数
- int n = arr.length;
-
- fuZhi(arr,a,b,count,n);
- printArray(arr);
- }
- private static void fuZhi(int[][] arr, int a, int b, int count, int n) {
- // TODO Auto-generated method stub
- //每次调用都把坐标指向圈的左上角
- a += 1;
- b += 1;
-
- //定义k记录住每一圈的个数
- int k = 1;
-
- //为上面赋值
- while(k<= (n-1)*1){
- arr[a][b++] = count;
- count++;
- k++;
- }
- //为右边赋值
-
- while(k<=(n-1)*2){
- arr[a++][b] = count;
- count++;
- k++;
- }
-
- //为底面赋值
- while(k <= (n-1)*3){
- arr[a][b--] = count;
- count++;
- k++;
- }
-
- //为左边赋值
- while(k <= (n-1)*4){
- arr[a--][b] = count;
- count++;
- k++;
- }
-
- //进入内圈行或者列要-2
- n -=2;
-
- //当进入最内圈时偶数个n会等于0,奇数个 n会等于1
- if(n==0)
- return;
- if(n==1){
- arr[a+1][b+1] = count;
- return;
- }
- fuZhi(arr,a,b,count,n);
-
- }
-
- //打印二维数组
- private static void printArray(int[][] arr) {
- // TODO Auto-generated method stub
- for(int[] ar : arr){
- for(int a : ar)
- System.out.print(a+"\t");
- System.out.println();
- System.out.println();
- }
- }
- }
复制代码 |