劍指Offer的學習筆記(C#篇)-- 變態跳臺階

題目描述

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

一 . 解題思路。

        該題目爲跳臺階題目的延伸,普通跳臺階每次跳的階數(1或2),而該題目每次跳的階數進化爲(1~N),其實萬變不離其宗,看下圖:html

 

        其實想法和普通跳臺階徹底一致,跳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)。老實說,這裏有點繞,我表示不是很清楚,普通跳臺階解題思路點這裏。該題目也是遞歸與循環的基礎使用。spa

二 . 代碼實現

方法1:遞歸法code

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

方法2:循環法htm

class Solution
{
    public int jumpFloorII(int n)
    {
        if (n<=2) return n;
        int result=0;
        int result1=1;
        int result2=2;
        for(int i=3;i<=n;i++)
        {
            result=result1+result2+1;
            result1=result1+result2;
            result2=result;
        }
        return result;
    }
}
相關文章
相關標籤/搜索