JavaScript 假設你正在爬樓梯。需要 n 階你才能到達樓頂。 每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢?

假設你正在爬樓梯。需要 n 階你才能到達樓頂。

每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢?

注意:給定 n 是一個正整數。

標籤:動態規劃
本問題其實常規解法可以分成多個子問題,爬第n階樓梯的方法數量,等於 2 部分之和
倒數第二步爬上 n-1 階樓梯的方法數量。因爲再爬1階就能到第n階
倒數第二步爬上 n-2 階樓梯的方法數量,因爲再爬2階就能到第n階
所以我們得到公式 arr[n] = arr[n-1] + arr[n-2]
同時需要初始化 arr[1]=1 和 arr[2]=2
時間複雜度:O(n)

比如爬10級樓梯
則獲取到最後一步是 走1階的方法數量
跟獲取到最後一步是 走2階的方法數量
相加則爲 總方法數量


/**
 * @param {number} n
 * @return {number}
 */
var climbStairs = function(n) {
    if (n == 1) {
        return 1;
    }
    if (n == 2) {
        return 2;
    }
    const arr = [];
    arr[1] = 1;
    arr[2] = 2;
    for(let i = 3; i <= n; i++) {
        arr[i] = arr[i - 1] + arr[i - 2];
    }
    return arr[n];
};

 

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