问题描述
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(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
斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
解题思路
和昨天的爬楼梯是一样的,只需要注意最后结果取模长即可
代码实现
java
递归
class Solution {
private Map<Integer,Integer> storeMap =new HashMap<>();//创建hash表
public int fib(int n) {
if(n==0) return 0;
else if(n==1) return 1;
if(null!=storeMap.get(n)){
return storeMap.get(n);
}
else{
int result=(fib(n-1)+fib(n-2))%1000000007;
storeMap.put(n,result);
return result;
}
}
}
非递归
class Solution {
public int fib(int n) {
if(n==0) return 0;
if (n==1) return 1;
int result=0;
int pre1=0,pre2=1;
for (int i=2;i<=n;i++){
result=(pre1+pre2)%1000000007;
pre1=pre2;
pre2=result;
}
return result;
}
}