力扣刷题日记-70-爬楼梯

66 阅读1分钟
/**
 * @param {number} n
 * @return {number}
 */
var climbStairs = function(n) {
    //方法一
    //动态规划的方式 默认0台阶,1种方法,1台阶1种方法,2台阶2种方法.....n台阶对应dp[n]种方法
    // if(n < 2) return 1
    // const dp = [1,1]
    // for(let i = 2; i<= n; i++) {
    //     dp[i] = dp[i - 1] + dp[i - 2]
    // }
    // return dp[n]



    // 递归做法超出时间限制.  不予通过
    // if(n == 1) return 1
    // if(n == 2) return 2
    // return climbStairs(n - 1) + climbStairs(n - 2)
    
    
    
    // 方法二
    // 优化递归可以通过了
    const map = new Map()
    const recursionFun = (n) => {
        if(n == 1) return 1
        if(n == 2) return 2
        if(map.get(n)) {
            return map.get(n)
        }else {
            let result = recursionFun(n - 1) + recursionFun(n - 2)
            map.set(n, result)
            return result
        }
    }
    return recursionFun(n)
    
    
    
    
    // 循环的方法
    // if (n == 1) return 1
    // if (n == 2) return 2
    // let result = 0, prePre = 1, pre = 2
    // for (let i = 3; i <= n; i++) {
    //     result = prePre + pre
    //     prePre = pre
    //     pre = result
    // }
    // return result
};