爬楼梯的动态规划问题
Staircase Problem
There are n
stairs, a person standing at the bottom wants to reach the top. The person can climb either 1
or 2
stairs at a time. Count the number of ways, the person can reach the top.
思路:
1.0级楼梯0种方法
2.1级楼梯1种方法
3.2.级楼梯2种方法
4.如果要爬n级楼梯所需步数steps[n]=steps[n-1]+steps[n-2];此处用个for循环就好了
代码
/** * Recursive Staircase Problem (Dynamic Programming Solution). * * @param {number} stairsNum - Number of stairs to climb on. * @return {number} - Number of ways to climb a staircase. */ export default function recursiveStaircaseDP(stairsNum) { if (stairsNum < 0) { // There is no way to go down - you climb the stairs only upwards. return 0; } // Init the steps vector that will hold all possible ways to get to the corresponding step. const steps = new Array(stairsNum + 1).fill(0); // Init the number of ways to get to the 0th, 1st and 2nd steps. steps[0] = 0; steps[1] = 1; steps[2] = 2; if (stairsNum <= 2) { // Return the number of ways to get to the 0th or 1st or 2nd steps. return steps[stairsNum]; } // Calculate every next step based on two previous ones. for (let currentStep = 3; currentStep <= stairsNum; currentStep += 1) { steps[currentStep] = steps[currentStep - 1] + steps[currentStep - 2]; } // Return possible ways to get to the requested step. return steps[stairsNum]; }