Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

จะใช้ backtracking สำหรับการฝึกปีนบันไดใน JavaScript ได้อย่างไร?


สมมติว่าเราต้องขึ้นบันไดที่มี n ขั้น และเราตัดสินใจที่จะออกกำลังกายเพิ่มเติมโดยการกระโดดขึ้นบันได

เราสามารถกระโดดได้มากถึง k ขั้นในการกระโดดครั้งเดียว k จะเท่ากับ 1 หรือ 2 โดยไม่คำนึงถึงจำนวนขั้นบันไดในขั้นบันได

เราจำเป็นต้องส่งคืนลำดับการกระโดดที่เป็นไปได้ทั้งหมดที่คุณสามารถปีนบันไดได้ แยกประเภท

ตัวอย่างเช่น −

for n = 4 and k = 2,

ผลลัพธ์ควรเป็น −

climbingStaircase(n, k) = [[1, 1, 1, 1], [1, 1, 2], [1, 2, 1], [2, 1, 1], [2, 2]];

ตัวอย่าง

รหัสสำหรับสิ่งนี้จะเป็น −

const n = 4;
const climbStairs = (n) => {
   if (n == 0) return 0;
   let memory = new Map();
   let recur = (left) => {
      if (memory.has(left)) return memory.get(left);
      if (left <= 0) return 0;
      if (left == 1) return 1;
      if (left == 2) return 2;
      memory.set(left, recur(left − 2) + recur(left − 1));
      return memory.get(left);
   };
   return recur(n);
};
console.log(climbStairs(n));

ผลลัพธ์

และผลลัพธ์ในคอนโซลจะเป็น −

5