LeetCode - 動態規劃 - 爬樓梯(青蛙跳臺階)

  • 題目:爬樓梯(青蛙跳臺階)
  • 難度:簡單
  • 題目描述:假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢?
  • 示例1:輸入: 2 輸出: 2
    解釋: 有兩種方法可以爬到樓頂。
    方法一 :1 階 + 1 階
    方法二: 2 階
  • 示例2:輸入: 3 輸出: 3
    解釋: 有三種方法可以爬到樓頂。
    方法一 :1 階 + 1 階 + 1 階
    方法二 :1 階 + 2 階
    方法三 :2 階 + 1 階

解題思路
假設當n=1時,只有一種方法到達1樓,那就是從0樓上一層,進而到達1樓,即到達一樓一共有1種方法,即m(1)=1

假設當n=2時,你可以從0樓上兩層,或者,從1樓上上一層,進而到達2樓,那麼,你到達二樓的總方法就是:到達一樓的方法 + 1 = 2,即到達二樓共有2種方法,即m(2)=m(1) + 1 = 2

假設當n=3時,你可以從1樓上兩層,或者,從2樓上一層,進而到達3樓,那麼,你到達三樓的總方法就是:到達二樓的總方法+到達一樓的總方法 = 2 + 1 = 3,即到達三樓一共有3種方法,即m(3)=m(2) + m(1) = 2

假設當n=4時,你可以從2樓上兩層,或者,從3樓上一層,進而到達4樓,那麼,你到達四樓的總方法就是:到達2樓的總方法+到達3樓的總方法 = 2 + 3 = 5,即到達四樓一共有5種方法。即m(4)=m(3) + m(2) =5

以此類推… …

假設當n=n時,你可以從n-2樓上兩層,或者,從n-1樓上一層,進而到達n樓,那麼,你到達n樓的總方法就是:到達n-2樓的總方法+到達n-1樓的總方法=m(n-2) + m(n-1) = m(n)

解題圖解
在這裏插入圖片描述
數學函數表達式
在這裏插入圖片描述

C語言迭代算法:
在這裏插入圖片描述

int climbStairs(int n){
    int f1 = 1;
    int f2 = 2;
    int f;

    if(n == 1){				//當樓梯是一層時
        f = f1;
    }else if(n == 2){		//當樓梯是兩層時
        f = f2;
    }else if(n <= 0){		//當樓梯層數小於0,即輸入不合法時
        f = 0;
    }else{					//當樓梯層數大於2時
        int i;
        for(i=3;i<=n;i++){	//迭代計算到達n層時的總方法數
            f = f1 + f2;
            f1 = f2;
            f2 = f;
        }
    }
    
    return f;		//返回到達n樓的總方法數
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章