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

題目描述

一隻青蛙一次能夠跳上1級臺階,也能夠跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(前後次序不一樣算不一樣的結果)。

一 . 解題思路。

       由題目可知,青蛙一次能夠跳一階或者兩階。假設臺階爲N階,咱們能夠這樣想:html

       假設青蛙最後一跳爲一階,此時預留出最後的一階,是否是青蛙跳(N-1)階與跳N階,可能出現的方法同樣呢(確定同樣啦,哈哈)spa

       假設青蛙最後一跳爲二階,此時預留出最後的兩階,是否是青蛙跳(N-2)階與跳N階,可能出現的方法同樣呢(也是同樣哦,有點繞嗎?)code

        由於青蛙的極限就是一次跳2階,因此不可能出現最後預留三階的狀況,所以,該題目實際上是一個斐波那契數列的應用而已,徹底能夠想象成斐波那契數列來作。所以,即出現了遞歸與循環兩種解題方法。固然,效率咱們以前在斐波那契數列討論過了,因此,這次再也不繼續討論(記住循環更好就是了)。htm

二 . 代碼實現(C#)

方法一:低效的遞歸法blog

class Solution {
    public int jumpFloor(int number){
        if(number==1||number==2)
       {
            return number;
        }
        else
        {
        return jumpFloor(number-1)+jumpFloor(number-2);
         }
    }
}

方法二:高效的循環法遞歸

class Solution
{
    public int jumpFloor(int number)
    {
        // write code here
        int x = 1;
        int y = 2;
        int n = 0;
        if(number<3)
        {
            return number;
        }
        else
        {
            for (int i = 3;i<=number;i++)
            {
                n = x+y;
                x = y;
                y = n;
            }
            return n;
        }
    }
}
相關文章
相關標籤/搜索