三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。

    示例1:

    1. 输入:n = 3
    2. 输出:4
    3. 说明: 有四种走法

    示例2:

    1. 输入:n = 5
    2. 输出:13

    题解:

    这道题就是一个爬楼梯的变种题,主要还是爬楼梯的情况,设f(x) = f(x-1) + f(x-2) + f(x-3),然后推断出每个变量的前一个数值,就可以从头开始算了,当然取模的时候我不太懂是怎么取,然后看了题解。。。

    1. /**
    2. * @param {number} n
    3. * @return {number}
    4. */
    5. var waysToStep = function(n) {
    6. if (n < 3) {
    7. return n;
    8. }
    9. let dp1 = 1;
    10. let dp2 = 2;
    11. let dp3 = 4;
    12. const base = 1000000007;
    13. for (let i = 3; i < n; i++) {
    14. const temp = ((dp1 + dp2) % base + dp3) % base;
    15. dp1 = dp2;
    16. dp2 = dp3;
    17. dp3 = temp;
    18. }
    19. return dp3;
    20. };