1.跳臺階
(1)題目
一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先後次序不同算不同的結果)。
(2)解題思路
相當於斐波那契序列,跳1級臺階,只有1種方法;跳2級臺階,有2種方法;跳3級臺階,有3種方法;跳4級臺階,有5種方法,依次下去,跳一個n級的臺階的方法數是跳n-1級臺階的方法數與跳n-2階臺階的方法數的總和。
(3)代碼
public class Solution {
public int JumpFloor(int target) {
if(target<=0){
return 0;
}
if (target>0&&target<=3){
return target;
}
return JumpFloor(target-1)+JumpFloor(target-2);
}
}
2.變態跳臺階
(1)題目:一隻青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。
(2)解題思路
當跳1級臺階時,f(1) = 1;
當跳2級臺階時,f(2) = f(1) + 1 = 2;
當跳3級臺階時,f(3) = f(2) + f(1) + 1 = 4;
當跳4級臺階時,f(4) = f(3) + f(2) + f(1) + 1 = 8;
以此類推:
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) - f(n-1) = f(n-1)
–>f(n) = 2 * f(n-1)
(3)代碼
public class Solution {
public int JumpFloorII(int target) {
if(target<=0){
return 0;
}
if (target==1){
return 1;
}
return 2*JumpFloorII(target-1);
}
}