leetcode:小青蛙跳台问题(十三)

475 阅读1分钟

题目:

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。

题解:

动态规划

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

//by:edelweisskoko

解析:

青蛙跳到第n级台阶上的跳法dp[n] = dp[n-1] *1+ dp[n-2] *1,即为动态规划中的状态转移方程。 

 状态定义:dp[n]dp[n]表示n级台阶的跳法 

状态转移方程:dp[n] = dp[n-1] + dp[n-2]

初始状态:dp[0] = 1,dp[1] = 1 

返回值:dp[]数组最后一个数 

有点类似于之前的硬币构成问题,所以说dp要考虑dp之前的所有情况,比如说dp差一个硬币和差两个硬币甚至五个硬币的,也就是差一跳和差两跳的