劍指offer——變態跳臺階

題目描述:

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


思路:

現在青蛙的能力升級了,不僅能一次跳1級,還能一次跳n級,這是了不起的進步(說笑的)。不管如何,我們仍然使用數學歸納法進行分析:

當n=1時,跳法只有1種,用f(1)=f(1-1)=1表示,下同;
當n=2時,可以一次跳1級,跳兩次,也可以一次兩2級,跳法有2種,f(2) = f(2-1) + f(2-2);//f(2-1)表示在有2級臺階的時候,第一次跳1級的跳法,其他類似
當n=3時,可以一次跳1級,跳3次,可以一次跳2級,下一次再跳1級,當然也可以一次跳3級,跳1次,所以跳法是f(3)=f(3-1)+f(3-2)+f(3-3)
……
當n=k的時候,f(k)=f(k-1)+f(k-2)+f(k-3)+…..+f(k-(k-1))+f(k-k)=f(0)+f(1)+f(2)+……+f(k-1),而f(k-1)=f((k-1)-1)+f((k-1)-2)+……+f((k-1)-(k-2))+f((k-1)-(k-1))=f(0)+f(1)+f(2)+……+f(k-2),
所以f(k)=2*f(k-1)。


代碼實現:

public int JumpFloorII(int target) {
        if(target <= 0) return -1;
        if(target == 1) return 1;
        return 2 * JumpFloorII(target - 1);
    }
發佈了144 篇原創文章 · 獲贊 24 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章