hello-algo/en/codes/javascript/chapter_dynamic_programming/climbing_stairs_backtrack.js

35 lines
1.1 KiB
JavaScript

/**
* File: climbing_stairs_backtrack.js
* Created Time: 2023-07-26
* Author: yuan0221 (yl1452491917@gmail.com)
*/
/* Backtracking */
function backtrack(choices, state, n, res) {
// When climbing to the nth step, add 1 to the number of solutions
if (state === n) res.set(0, res.get(0) + 1);
// Traverse all choices
for (const choice of choices) {
// Pruning: do not allow climbing beyond the nth step
if (state + choice > n) continue;
// Attempt: make a choice, update the state
backtrack(choices, state + choice, n, res);
// Retract
}
}
/* Climbing stairs: Backtracking */
function climbingStairsBacktrack(n) {
const choices = [1, 2]; // Can choose to climb up 1 step or 2 steps
const state = 0; // Start climbing from the 0th step
const res = new Map();
res.set(0, 0); // Use res[0] to record the number of solutions
backtrack(choices, state, n, res);
return res.get(0);
}
/* Driver Code */
const n = 9;
const res = climbingStairsBacktrack(n);
console.log(`${n} 阶楼梯共有 ${res} 种方案`);