[劍指offer]算法8 青蛙跳臺階問題

題目描述1

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

時間限制:1秒空間限制:32768K

【問題分析】剛開始我對於這道題目我想的相當的複雜,我說出來可以共勉一下,如果真的能研究處理來那就更好了。我是根據2的次方來確定每次跳幾個臺階,如果是2的0次方,那就是1個,如果是2的1次方,那就是2個,那麼你就會得到很多的101010001類似於這樣的序列然後從中找規律就行。結果呢,我就是沒想出來。第二個方法呢,我就從1個臺階開始算從中找規律結果還真是巧,符合斐波那契數列。所以這道題目用斐波那契數列來完成。既然知道了方法,那就很好辦了。鏈接:http://blog.csdn.net/h2677lucy/article/details/78377966,這裏面就是求解斐波那契數列的兩個方法,遞歸和純算數。

題目描述2

一隻青蛙一次可以跳上1級臺階,也可以跳上2級,...,也可以跳n個臺階。求該青蛙跳上一個n級的臺階總共有多少種跳法。網上是這麼分析的,而且我代碼也通過了

因爲n級臺階,第一步有n種跳法:跳1級、跳2級、到跳n級
跳1級,剩下n-1級,則剩下跳法是f(n-1)
跳2級,剩下n-2級,則剩下跳法是f(n-2)
所以f(n)=f(n-1)+f(n-2)+...+f(1)
因爲f(n-1)=f(n-2)+f(n-3)+...+f(1)
所以f(n)=2*f(n-1)

public class Solution {
    public int JumpFloorII(int n) {
        if(n<=1) {
            return 1;
        }else {
            return 2*JumpFloorII(n-1);
        }
    
    }
}

測試類代碼

package Offer;

public class offer8 {
    public static void main(String[] args) {    
        offer8 o8=new offer8();
        System.out.println(o8.f(8)+"H");
    }
    public int f(int n) {
        if(n<=1) {
            return 1;
        }else {
            return 2*f(n-1);
        }
    }

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章