劍指Offer—— 跳臺階

題目

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


解析:當青蛙到到n級時,有兩種跳法,一種是從n-1級跳1級,還有種是n-2跳2級
f(n)=f(n-1)+f(n-2),大家對這個公式是不是很熟悉,對,是斐波那契數列。所以這是一道動態規劃的問題。

// 斐波那契數列,只能上1或2級的方法
    public int JumpFloor(int target) {
        if (target <= 2)
            return target;
        int[] n = new int[target + 1];
        n[1] = 1;
        n[2] = 2;
        for (int i = 3; i <= target; i++)
            n[i] = n[i - 1] + n[i - 2];
        return n[target];
    }

擴展

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


解析:當青蛙到到n級時,有跳1級,2級,3級…..n級
f(n)=f(n-1)+f(n-2)+f(n-3)……

// 斐波那契數列,只能上n級的方法
    public int JumpFloor1(int target) {
        if (target <= 2)
            return target;
        int[] n = new int[target + 1];
        n[1] = 1;
        n[2] = 2;
        for (int i = 3; i <= target; i++){
            n[i]=1;
            for(int j=0;j<i;j++){
                n[i]+=n[j];
            }
        }
        return n[target];
    }
發佈了97 篇原創文章 · 獲贊 19 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章