一共n阶台阶,而青蛙的一步是从1到n都可以选择。
思路:虽然解的结果不是斐波那契数列,但是需要能观察出:
青蛙第一次可以跳1级,则还剩n - 1级台阶,即F(n - 1)
青蛙第一次可以跳2级,则还剩n - 2级台阶,即F(n - 2)
...
青蛙第一次可以跳n - 1级,则还剩1级台阶,即F(1)
青蛙第一次可以跳n级,即1种跳法
则F(n) = F(n - 1) + F(n - 2) + F(n - 3) + F(n - 4) + ... + F(1) + 1
而F(n-1) = F(n - 2) + F(n - 3) + F(n - 4) + F(n - 5) + ... + F(1) + 1
可以得到F(n) = 2 * F(n-1)
解法1:直接调用递归
public class Solution {
public int JumpFloorII(int target) {
if(target == 0 ||target ==1)
return target;
return 2*JumpFloorII(target-1);
}
}解法2:考虑到F(n) = 2 * F(n-1) 实际是求2^(n-1),因此也可以用位运算 返回一个需要求的幂就可以了。
public class Solution {
public int JumpFloorII(int target) {
if(target<=0)
return 0;
return 1<<(target-1);
}
}解法3 使用数组记录计算过的值
public class Solution {
public int JumpFloorII(int target) {
if(target<=0 || target==1)
return target;
int[] arr =new int[target+1];
arr[1]=1;
for(int i=2;i<=target;i++){
arr[i]=2*arr[i-1];
}
return arr[target];
}
}


京公网安备 11010502036488号