动态规划真的懂了呀系列《线性DP:滚动数组+斐波那契数》

82 阅读1分钟

价值:记录学习过程的思考,本身就是一场动态规划的前生,记忆化搜索。

class Solution {
    public int fib0(int n) {
//答案需要取模 1e9+7(1000000007) ,如计算初始结果为:1000000008,请返回 1。
        int mod = 1000000007;
        if(n == 0) return 0;
        if(n == 1) return 1;
        int [] dp = new int[n+1];
        dp[0] = 0;
        dp[1] = 1;
        for(int i = 2; i<=n;i++){
            dp[i] = (dp[i-1] + dp[i-2]) % mod;
        }
        return dp[n];
    }

    public int fib(int n) {
        int mod = 1000000007;
        if(n == 0) return 0;
        if(n == 1) return 1;
        int l = 0;
        int r = 1;
        int ans = 0;
        for(int i = 2; i<=n;i++){
           ans = (l + r) % mod;
           l = r;
           r = ans;
        }
        return ans;
    }
}