題目描述:
一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法。
思路:
這種問題的思路一般是採用數學歸納法,當n=1時,只有一種跳法;當n=2時,青蛙可以一次跳2級,也可以一次跳兩級,需要跳兩次,所以有兩種跳法;當n=3的時候,首先考慮一次跳1級的情況,由於有3級,所以還有2級沒跳,而跳兩級的跳法已經在前面n=2的情況中計算得到了;下面考慮一次跳2級的情況,同樣跳完2級的之後,還有1級沒有跳,而跳剩下1級的方法是當n=1的時候計算得到的,所以可以歸納出當n=3的時候,跳法是f(3)=f(3-1)+f(3-2)。
爲了確保正確性,我們繼續分析當n=4的情況,由於青蛙第一次的跳法仍然只有兩種。我們先分析第一次跳1級的情況,跳完1級之後,還有3級沒有跳完,而剩下的3級的跳法總數可以由f(3)得到;當第一次跳2級的時候,還有2級沒有跳完,所以剩餘2級的跳法總數可以由f(2)得到。綜合以上分析,我們得到當n=4的時候,跳法總數是f(4)=f(4-1)+f(4-2)=f(3)+f(2)。以此類推,我們可以得到臺階數爲n的情況是f(n)=f(n-1)+f(n-2)。
代碼實現:
public class Solution {
public int JumpFloor(int target) {
int a = 1,b=2,c=0;
if(target<=0){
return 0;
}else if(target == 1){
return 1;
}else if(target==2){
return 2;
}else{
for(int i = 3;i<=target;i++){
c = a+b;
a = b;
b = c;
}
return c;
}
}
}