题目:
一只青蛙一次可以跳上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差一个硬币和差两个硬币甚至五个硬币的,也就是差一跳和差两跳的