9.变态跳台阶
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
示例:
输入
3
返回值
4
思路:
像这种一个问题,能由子问题来解决的,通常使用动态规划的思想。
- 定义状态:int dp[target.length + 1] ,dp[i] 表示跳到第 i 个台阶,有多少种方法。
- 状态转移方程:dp[i] = dp[i-1]+dp[i-2]+~~~+dp[0],因为到第 i 层台阶,可以从第0层跳 i 层台阶到达,从第1层跳n-1层台阶到达,~~~从第 i-1 层跳1层到达。
- 初始化:dp[0] = 1,dp[1] = 1。能从第0层到达任意台阶,因此dp[0] = 1。
代码实现:
public class Solution9 {
public int JumpFloorII(int target) {
if (target <= 0) return 0;
if (target == 1) return 1;
if (target == 2) return 2;
//定义动态数组
int dp[] = new int[target + 1];
//初始化
dp[0] = 1; //能从第0层到达任意台阶
dp[1] = 1;
for (int i = 2; i < dp.length; i++) {
//dp[i] = dp[0]+...+dp[i-1]
for (int j = 0; j < i; j++) {
dp[i] += dp[j];
}
}
return dp[target];
}
}