一、题目
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
二、思路及代码
思路一(递归):
n 级台阶,第一步有 n 种跳法:跳1级、跳2级、… …、跳n级。
第一步跳 1 级,剩 n-1 级,则剩下的跳法是 f(n-1);
第一步跳 2 级,剩 n-2 级,则剩下的跳法是 f(n-2);
… …
所以 n 级台阶的跳法:f(n)=f(n-1)+f(n-2)+… …+f(1),
又 f(n-1)=f(n-2)+f(n-3)+… …+f(1),
所以 f(n)=2*f(n-1)。
代码如下:
public class Solution {
public int JumpFloorII(int target) {
if(target == 1)
return 1;
return 2 * JumpFloorII(target - 1);
}
}
思路二:(来自牛客题解,就是牛!!!)
每个台阶都有跳与不跳两种情况(除了最后一个台阶,最后一个台阶必须跳),所以共用 2^(n-1) 种情况。
代码如下:
public class Solution {
public int JumpFloorII(int target) {
return (int)Math.pow(2, target - 1);
}
}
可以用移位实现 2^(n-1) 。(牛皮!!!)
return 1 << --target;