青蛙跳臺階

題目描述:

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


思路:

我們先考慮青蛙第一跳:

  • 第一次跳1個臺階,那麼還剩n-1個臺階,跳法爲f(n-1)
  • 第一次跳2個臺階,那麼還剩n-2個臺階,跳法爲f(n-2)

所以總的跳法:f(n)=f(n-1)+f(n-2)

  • 當跳到只剩1個臺階時,有1種跳法:f(1)=1
  • 當跳到只剩2個臺階時,有2種跳法:f(2)=2

觀察發現,這就是一個斐波那契數列


我的代碼:

public int JumpFloor(int target) {//target爲臺階總數
        if(target==2){
            return 2;
        }
        if(target==1){
           return 1;
        }
        if(target<=0){
            return 0;
        }
        return JumpFloor(target-1)+JumpFloor(target-2);
    }

運行時間:544ms

佔用內存:9056 k


改進:

爲避免遞歸產生的棧溢出,改用自底向上的動態規劃(迭代)來解題:

 public int JumpFloor(int target) {
       if(target==2){
            return 2;
        }
        if(target==1){
           return 1;
        }
        if(target<=0){
            return 0;
        }
        int first = 1, second = 2, third = 0;
        for (int i = 3; i <= target; i++) {
            third = first + second;
            first = second;
            second = third;
        }
        return third;
    }

運行時間:15ms

佔用內存:9328 k


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