滴滴2021后端开发岗笔试:

生成一个斐波那契数列的螺旋二维数组

import java.util.Scanner;

public class didi3 {
   private static  int[] arr;
   public static void main(String[] args) {
       Scanner scan = new Scanner(System.in);
       int n= scan.nextInt();
       if(n==1){
           System.out.println(1);
           return ;
      }

       arr = getArray(n);
       int[][] res = generata(n, arr);
       for(int i=0;i<n;i++){
           for(int j=0;j<n;j++){
               System.out.print(res[i][j]+" ");
          }
           System.out.println();
      }
  }

   public  static  int[][] generata(int n , int[] arr ){
       int l = 0,r = n-1, t = 0,b = n-1;
       int[][] mat = new int[n][n];
       int num = 1,tar = n * n ;
       while (num <= tar ){
           for(int i=l;i<=r;i++) {
               mat[t][i] = arr[arr.length-num];
               num++;
          }
           t++;
           for(int i=t;i<=b;i++){
               mat[i][r] = arr[arr.length-num];
               num++;
          }
           r--;
           for(int i=r;i>=l;i--){
               mat[b][i] =  arr[arr.length-num];
               num++;
          }
           b--;
           for(int i=b;i>=t;i--){
               mat[i][l] =  arr[arr.length-num];
               num++;
          }
           l ++;
      }
       return mat;
  }
   public static int[] getArray(int n ){
       if(n<1){return null;}
       int[] res =  new int[n * n];
       res[0] = 1;
       res[1] = 1;
       for(int i=2;i<res.length;i++){
           res[i] =  res[i-1] + res[i-2];
      }
       return res;
  }
}

这道题的难度其实不大,只是最开始我以为可以用递归可以实现,其实递归是不好实现的,因为递归要求每一步的操作都是相同的,都是类似的,但是这个题目就不满足要求。
原文地址:https://www.cnblogs.com/1832921tongjieducn/p/13543954.html