题目描述
斐波那契数 (通常用 F(n)
表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0,F(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n > 1
给定 n
,请计算 F(n)
。
答案需要取模 1e9+7(1000000007) ,如计算初始结果为:1000000008,请返回 1。
示例 1:
输入:n = 2 输出:1 解释:F(2) = F(1) + F(0) = 1 + 0 = 1
正常解法
如果直接使用递归会发现很容易就超出时间限制,所以我们可以考虑使用循环加上集合,来实现
具体代码实现:
func fib(n int) int {
if n < 2{
return n
}
dp := make([]int, n+1)
dp[0] = 0
dp[1] = 1
var mod int = 1000000007
for i := 2; i <= n; i++ {
dp[i] = (dp[i-1] + dp[i-2]) % mod
}
return dp[n]
}
或者不使用map,也可以使用变量来存储
func fib(n int) int {
if n < 2{
return n
}
a := 0
b := 1
c := 0
// a b c
// b c a+b
// c a+b b+c
var mod int = 1000000007
for i := 2; i <= n; i++ {
c = (a + b) % mod
a = b
b = c
}
return c
}