一共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]; } }