• Java实现 LeetCode 509 斐波那契数


    509. 斐波那契数

    斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:

    F(0) = 0, F(1) = 1
    F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
    给定 N,计算 F(N)。

    示例 1:

    输入:2
    输出:1
    解释:F(2) = F(1) + F(0) = 1 + 0 = 1.
    示例 2:

    输入:3
    输出:2
    解释:F(3) = F(2) + F(1) = 1 + 1 = 2.
    示例 3:

    输入:4
    输出:3
    解释:F(4) = F(3) + F(2) = 2 + 1 = 3.

    提示:

    0 ≤ N ≤ 30

    PS:
    第一个比较简单,
    第二个是用黄金分割求斐波那契
    第三个是矩阵求斐波那契

    class Solution {
       public int fib(int N) {
    //     if (N == 0 || N == 1) {
    //         return N;
    //     }
    //     int x = 0,y = 1,z = 1,i = 0,end = N-2;
    //     while (i <= end) {
    //         z = x + y;
    //         x = y;
    //         y = z;
    //         i++;
    //     }
    //     return z;
    
    
    
            // double goldenRatio = (1 + Math.sqrt(5)) / 2;
            // return (int)Math.round(Math.pow(goldenRatio, N)/ Math.sqrt(5));
    
    
    
               if (N <= 1) {
                  return N;
                }
            int[][] A = new int[][]{{1, 1}, {1, 0}};
            matrixPower(A, N-1); 
            return A[0][0];
        }
    
        void matrixPower(int[][] A, int N) {
            if (N <= 1) {
              return;
            }
            matrixPower(A, N/2);
            multiply(A, A);
    
            int[][] B = new int[][]{{1, 1}, {1, 0}};
            if (N%2 != 0) {
                multiply(A, B);
            }
        }
    
        void multiply(int[][] A, int[][] B) {
            int x = A[0][0] * B[0][0] + A[0][1] * B[1][0];
            int y = A[0][0] * B[0][1] + A[0][1] * B[1][1];
            int z = A[1][0] * B[0][0] + A[1][1] * B[1][0];
            int w = A[1][0] * B[0][1] + A[1][1] * B[1][1];
    
            A[0][0] = x;
            A[0][1] = y;
            A[1][0] = z;
            A[1][1] = w;
    }
    
    }
    
  • 相关阅读:
    对自己负责~~
    继续负责
    问题的一天
    1个月=22年
    刚才写的没显示?
    布置任务
    心情很糟
    考试结束
    没有负责哈
    php获取任意时间的时间戳
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12946419.html
Copyright © 2020-2023  润新知