题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路
- 排列组合思想,直接得到答案
- 按照跳台阶那题的思路,逐步推导,然后用递归
f(0)=0 f(1)=1 f(2)=2
… … …
f(n-1) = f(0) + f(1)+f(2)+f(3) + … + f((n-1)-1) = f(0) + f(1) + f(2) + f(3) + … + f(n-2)
f(n) = f(0) + f(1) + f(2) + f(3) + … + f(n-2) + f(n-1) = f(n-1) + f(n-1)
即得: f(n) = 2*f(n-1)
实现
- 排列组合思想
public int JumpFloorII(int target) {
//除了最后一个台阶必须跳,其他台阶都有两个选择:跳,不跳
//所以总共有2^(n-1)种跳法
if(target<3) return target;
return (int)Math.pow(2,target-1); //pow返回double型,需要强转!!!
}
- 推导,递归
public int JumpFloorII(int target) {
//递归。逐步推导出公式 f(n) = 2*f(n-1)
if(target<3) return target;
return 2*JumpFloorII(target-1);
}
Notes:不能忘了Math.pow方法返回double型,记得强转!!!