1. 程式人生 > >《劍指Offer》讀書筆記08:跳臺階

《劍指Offer》讀書筆記08:跳臺階

題目描述

一隻青蛙一次可以跳上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]; } };