题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
解题思路
- 跳一级,剩下的跳法是f(n - 1)种
- 跳两级,剩下的跳法是f(n - 2)种
- 跳n级,剩下的跳法是f(n) =f(n - 1) + f(n - 2) + … + f(2) + f(1)
- 则跳n级需要的次数是f(n) =f(n - 1) + f(n - 2) + … + f(2) + f(1) + 1
- 因为f(n - 1) = f(n - 2) + … + f(2) + f(1) + 1
- 所以f(n)= 2 * f(n - 1)
- 还有一种思路:一共跳n级台阶,最后一节是落脚点,一定存在,剩下n - 1节有存在与不存在两种可能,则最终结果就是 2 ^ (n - 1)种
代码实现
public class Solution {
public int JumpFloorII(int target) {
if (target <= 0) {
return 0;
} else if (target == 1) {
return 1;
} else {
return JumpFloorII(target - 1) * 2;
}
}
}
- 用左移来计算2^(n-1)
public class Solution {
public int JumpFloorII(int target) {
if (target <= 0) return 0;
return 1 << (target - 1);
}
}