写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:
F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
示例 1:
输入:n = 2
输出:1
示例 2:
输入:n = 5
输出:5
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
这种题目很容易使用递归法来解决,但是带来的问题就是递归处每一个数据都是用F(1)和F(0)组合而来,而再计算过程中,不保存这些中间变量,所以导致大量的重复计算过程。
正是由于上面递归法的过程带来的问题,我们尝试保存一些中间变量,并且改变我们解决问题的顺序,再递归中我们是每次冲顶往根的寻找数据,所以会造成大量的重复计算。然后如果我们每次从根部开始向顶部计算,则每次结果都保存下来,则再新的需求是,直接再对应位置提出出来即可。代码如下
class Solution { public int fib(int n) { int[] arr = new int[n+2]; arr[0] = 0; arr[1] = 1; for(int i=2;i<=n;i++){ arr[i] = (arr[i-1]+arr[i-2])%1000000007; } return arr[n]; } }
原文:https://www.cnblogs.com/dazhu123/p/12422652.html