2021届秋招--滴滴笔试--逆时针构建逆序斐波那契矩阵

题目描述:给出n,则从斐波那契数列最大值开始,以第一行第一列为起点逆时针构建n x n的矩阵,并输出

问题:我也不知道为啥,只有73的通过率。

思路:就按逆时针构建,关键是确定好构建时候的上下限

public class Num2 {

    public static void getRes(int n){
        LinkedList fib = new LinkedList<>();
        fib.add(1);
        fib.add(1);
        int temp =0;
        while ( temp < n*n -2){
            int length = fib.size();
            fib.add(fib.getLast() + fib.get(length-2));
            ++temp;
        }
        int [][] matrix = new int[n][n];
        for (int i = 0; i < n/2; ++i){
            for (int j = 0; j < (n-1-i*2); ++j){
                matrix[i][i+j] = fib.getLast();
                fib.removeLast();
            }
            for (int j = 0; j < (n-1-i*2); ++j){
                matrix[i+j][n-1-i] = fib.getLast();
                fib.removeLast();
            }
            for (int j = 0; j < (n-1-i*2); ++j){
                matrix[n-1-i][n-1-i-j] = fib.getLast();
                fib.removeLast();
            }
            for (int j =0; j < (n -1-i*2); ++j){
                matrix[n-1-i-j][i] = fib.getLast();
                fib.removeLast();
            }
        }
        if (n % 2 == 1){
            matrix[n/2][n/2] = fib.getLast();
            fib.removeLast();
        }
        for (int i = 0; i < n; ++i){
            StringBuilder temRes = new StringBuilder();
            for (int j = 0; j < n-1; ++j){
                temRes.append(matrix[i][j]);
                temRes.append(" ");
            }
            temRes.append(matrix[i][n-1]);
            System.out.println(temRes.toString());
        }

    }

    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        getRes(n);
    }
}

 

你可能感兴趣的:(Java,java,算法)