《劍指Offer》讀書筆記08:跳臺階
阿新 • • 發佈:2019-02-18
題目描述
一隻青蛙一次可以跳上1級臺階,也可以跳上2級。
求該青蛙跳上一個n級的臺階總共有多少種跳法。
解題思路
如圖,假如青蛙要跳上第5個臺階,n=5,即求F(5)。
因為青蛙一次可以跳1級,也可以跳2級。
1. 青蛙最後一跳是跳1級,那麼青蛙之前在第4個臺階。
青蛙到達第3個臺階時的跳法種類是F(4),從第4個臺階跳1級到第5個臺階是確定的,並不會增加跳法種類。
所以青蛙最後一跳是跳1級時,跳法種類為F(4)。
2. 青蛙最後一跳是跳2級,那麼青蛙之前在第3個臺階。
青蛙到達第3個臺階時的跳法種類是F(3),從第3個臺階跳2級到第5個臺階是確定的,並不會增加跳法種類。
所以青蛙最後一跳是跳2級時,跳法種類為F(3)。
綜上,F(5) = F(4) + F(3)
推廣到n,有F(n) = F(n-1) + F(n-2)
其實,青蛙跳依然是一個 模型
參考程式碼
class Solution {
public:
int jumpFloor(int number) {
if ( number <= 0 ) {
return 0;
}
int tmp[2] = {1, 2};
for (int i = 2; i < number; i++ ) {
tmp[i%2] += tmp[(i+1 )%2];
}
return tmp[(number-1)%2];
}
};