题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路:
f(1) = 1 // 跳上第一个台阶,只有一种可能;
f(2) = f(1) + 1 // 跳上第二个台阶,有两种可能, 从1台阶或0台阶跳上;
f(3) = f(2) + f(1) + 1 // 跳上第二个台阶,有3种可能, 从2台阶、1台阶或0台阶跳上;
...
...f(n-1) = f(n-2) + f(n-3) + ... + f(1) + 1;
f(n) = f(n-1) + f(n-2) + f(n-3) + ... + f(1) + 1;
f(n) = 2*f(n-1)
public class Solution { public int JumpFloorII(int target) { if(target <= 0) return -1; if(target == 1){ return target; } return 2*JumpFloorII(target-1); } }
n台阶,只关心是最后一步从哪个台阶(preStep)直接跳到n台阶,如果题目有改变,青蛙依次可以跳1级台阶、2级台阶时,我们就只关心最后跳到n级台阶之前青蛙所在台阶,所以:f(n) = f(n-1) + f(n-2)
public class Solution { public int JumpFloor(int target) { if(target <= 0) return -1; if(target == 1 || target == 2){ return target; } return JumpFloor(target - 1) + JumpFloor(target - 2); } }