题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)
思路
很经典的动态规划问题
首先明确一些特殊情形,
0阶时,0种跳法
1阶时,1种
2阶时,2种
从第3阶开始,就可以使用动态规划来求种数了,dp[i]表示跳到第i阶的跳法总数,公式是dp[i]=dp[i-1]+dp[i-2]
实现
public int JumpFloor(int target) {
//典型的动态规划
//特殊情况:只有0/1/2级台阶时的跳法数
if(target<3) return target;
//dp[i]表示上i级台阶的跳法总数
int[] dp=new int[target+1]; //存储空间至少目标数+1
dp[0]=0;
dp[1]=1;
dp[2]=2;
//从三阶开始
for(int i=3;i<=target;i++){
dp[i]=dp[i-1]+dp[i-2];
}
return dp[target];
}