剑指 Offer 10- II.青蛙跳台阶问题

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

这题与上篇是同一个知识点。剑指Offer10- I斐波那契数列
同样是动态规划,但考虑转移方程是个关键点,动态规划重点也是找到这个正确的转移方程。
n=1,只有一种跳法。n=2,有两种跳法。n=3,有三种跳法。n=4,有5种跳法。可以推理f(n)=f(n-1)+f(n-2)
这样转移方程就出来了,但是我当时没想到n=0时,竟然返回1。
Java代码:

 public int numWays(int n) {
     

    if (n == 0 || n == 1) {
     
            return 1;
        }
        int[] dp = new int[n + 1];
        dp[1] = 1;
        dp[2] = 2;
        for (int i = 3; i <= n; i++) {
     
            dp[i] = (dp[i - 2] + dp[i - 1])%1000000007;
        }
        return dp[n];
    }

你可能感兴趣的:(算法题,动态规划,算法)