C++編程例題變態跳臺階的算法分析

問題描述

一隻青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。


問題分析

f(n) 爲跳上n級臺階的跳法數。
該青蛙跳上一個n級的臺階時,在第一跳有n種跳法,分別是:跳1級、跳2級…跳n級。
跳完第一跳後,完成接下來的旅程就是下面的情況:
第一跳跳1級,接下來就有f(n-1) 種跳法到達第n級;
第一跳跳2級,接下來就有f(n-2) 種跳法到達第n級;
。。。
。。。
第一跳跳n級,直接結束旅程。

因此,我們可以把跳上一個n級的臺階 分解成 第一跳後續,即
f(n)=f(n-1)+f(n-2)+…+f(1)+1
其中 f(n-1) 對應第一跳跳了1級的情況,f(n-2) 對應第一跳跳了2級的情況,…,f(1) 對應第一跳跳了n-1級的情況,1 對應第一跳跳了n級的情況。
同時注意到,f(n-1)=f(n-2)+f(n-3)+…+f(1)+1 ,用 f(n-1) 替換掉 f(n) 中的 f(n-2)+…+f(1)+1 ,可以得到 f(n)=2f(n-1). ;即 f(n) 是個以2爲比的等比數列。

我們再通過枚舉得到 f(1)=1, f(2)=2 ,就可以推出 f(n)=2n-1.


代碼實現

看懂算法之後,代碼就很簡單辣 ~ 一句話搞定:

class Solution {
public:
    int jumpFloorII(int number) {
        return pow(2,number-1);
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章