題目描述
一隻青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。
題目描述
看題目標題爲變態跳青蛙,其實認真分析一下就很簡單了。
- 一級臺階時,只有一種跳法。
- 二級臺階時,當第一次跳一級時,還剩一級臺階,此時只有一種跳法;第一次跳二級時,此時只有一種跳法。所以二級臺階共有兩種(1+1)跳法。
- 三級臺階時,當第一次跳一級時,還剩二級臺階,利用二級臺階時的跳法,此時有兩種跳法;當第一次跳二級時,還剩一級臺階,利用一級臺階時的跳法,此時有一種;當第一次直接跳三級時,此時只有一種跳法。所以三級臺階共有四種(1+2+1)跳法。
- 四級臺階時,當第一次跳一級時,還剩三級臺階,利用三級臺階的跳法,此時有4種跳法;當第一次跳二級時,還剩二級臺階,利用二級臺階的跳法,此時有2種跳法;當第一次跳三級時,還剩一級,利用一級臺階的跳法,此時有一種;當第一次直接跳四級時,此時只有一種跳法。所以總共有八種(1+2+4+1)跳法。
- … …
由上面的分析我們可以得出結論,當n大於一時,跳上n級臺階的跳法爲跳上1級,2級…n-1級的跳法和加一。
下面爲n級臺階的跳法數:
臺階數 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | … |
---|---|---|---|---|---|---|---|---|---|
跳法數 | 0 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | … |
很容易發現規律,f(n) = 2 * f(n-1);
,由此可以想到使用遞歸
Java代碼實現
public int JumpFloorII(int target) {
if(target <= 1){
return target;
}else{
return 2*JumpFloorII(target-1);
}
}