Skip to content

Latest commit

 

History

History
43 lines (34 loc) · 691 Bytes

10- I. 斐波那契数列.md

File metadata and controls

43 lines (34 loc) · 691 Bytes

解题思路

dp 公式已给出,很好做了

1. 动态规划

这里的 dp[i] 代表斐波那契数列的第 i 项

func fib(n int) int {
    if n <= 1 {
        return n
    }
    dp := make([]int, n+1)
    dp[0] = 0
    dp[1] = 1
    for i := 2; i <= n; i++ {
        dp[i] = (dp[i-1] + dp[i-2])%1000000007
    }
    return dp[n]
}

2. 简化

根据 dp 公式发现,每次只用两个变量存离 n 最近的两项就行,可以简化得到

func fib(n int) int {
    if n <= 1 {
        return n
    }
    a, b := 0, 1
    for i := 2; i <= n; i++ {
        a, b = b, (a+b)%1000000007
    }
    return b
}