##四、变态条楼梯
###题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
###分析
也是斐波那契数列问题,根据上述的思路,可以得到
f(n)=f(n-1)+f(n-2)+f(n-3)+...+f(0),由此就有两种思路解答
(1)接着上式推出=> f(n)=2f(n-1)
(2)通过创建一个数组,进行循环,把f(0)、f(1)、...、f(n-1)的值存入数组中,然后把数组元素的值都相加得到f(n)
###代码
(1)
public class Solution { public int JumpFloorII(int target) { if(target==0){ return 0; } if(target==1){ return 1; } return 2*JumpFloorII(target-1); } }
(2)
public class Solution { public int JumpFloorII(int target) { if(target <= 2){ return target; } int[] dp = new int[target + 1]; // 0 号不使用 dp[1] = 1; //跟普通的 pre2 一个意思 dp[2] = 2; //跟普通的 pre1 一个意思 for (int i = 3; i <= target; i++){ for (int j = i - 1; j >= 1; j--){ dp[i] += dp[j]; } dp[i]++; } return dp[target]; } }