• 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;
    }
    
    }
    
  • 相关阅读:
    CC3000 SmartConfig
    谈谈几个月以来开发android蓝牙4.0 BLE低功耗应用的感受
    CC3000 SPI接口编程介绍
    cc3000+LM3S9B96
    CC3000 主机驱动API介绍
    Wi-FiR CC3000 模块
    修改远程桌面连接端口及修改端口号后如何连接!
    电脑网线/水晶头的连接方法(A类,B类)
    快速切换IP的批处理!
    IE打开报错,提示该内存不能为read的解决办法!
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075569.html
Copyright © 2020-2023  润新知