BM62 斐波那契数列


描述

大家都知道斐波那契数列,现在要求输入一个正整数 n ,请你输出斐波那契数列的第 n 项。

斐波那契数列是一个满足 Java练习题—动态规划(一)_斐波那契数列 的数列

数据范围:Java练习题—动态规划(一)_java_02

要求:空间复杂度 Java练习题—动态规划(一)_斐波那契数列_03,时间复杂度 Java练习题—动态规划(一)_java_04 ,本题也有时间复杂度 Java练习题—动态规划(一)_Math_05 的解法


输入描述:

一个正整数n

返回值描述:

输出一个正整数。

示例1

输入:

4

返回值:

3

说明:

根据斐波那契数列的定义可知,fib(1)=1,fib(2)=1,fib(3)=fib(3-1)+fib(3-2)=2,fib(4)=fib(4-1)+fib(4-2)=3,所以答案为3。

示例2

输入:

1

返回值:

1


Java代码

import java.util.*;

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param n int整型
     * @return int整型
     */
    public int Fibonacci (int n) {
        // write code here
        double squareRoot = Math.sqrt(5);
        double a = (1 + squareRoot) / 2;
        double b = (1 - squareRoot) / 2;
        double res = (1 / squareRoot) * (Math.pow(a, n) - Math.pow(b, n));
        return (int)Math.floor(res);
    }
}


import java.util.*;

public class Solution {
    public int Fibonacci(int n) {
        if (n == 1 || n == 2) {
            return 1;
        }
        // dp[i]即fib(i)
        int[] dp = new int[n + 1];
        dp[0] = 0;
        dp[1] = 1;
        dp[2] = 1;
        for (int i = 3; i <= n; i++) {
            dp[i] = dp[i - 1] + dp[i - 2];
        }
        return dp[n];
    }
}