动态规划2:上台阶问题

2019-07-25  本文已影响0人  RichardBillion

有一个共N级的台阶,一次可以走1级或者2级,问从平地上出发到最高点有多少中走法。

分析: 从终点来看,其走法为倒数一级的走法加上倒数两级的走法。

记f(n) 为到第n级台阶的走法,

则得到DP方程: f(n) = f(n-1)+f(n-2);

初始值有:
f(0) = f(1) = 1

发现就是一个菲波那切数列。。

则代码为:

function res(n) {
    let arr = [];
    arr[0] = 1;
    arr[1] = 1;

    for(let i = 2; i<=n; i++) {
        arr[i] = arr[i-1] + arr[i-2];
    }
    return arr[n];
}

但其实没必要用一个数组来记录之前的值,可以只记录前两个值,将空间复杂度由O(n)降到O(1), 代码如下:

function result(n) {
    let a= 1;
    let b = 1;
    for(let i = 2; i <= n; i++) {
        [a, b] = [b, a+b];
    }
    return b;
}
上一篇下一篇

猜你喜欢

热点阅读