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

การจัดเรียงตัวเลขที่สวยงามใน JavaScript


การจัดวางที่สวยงาม:

สมมติว่าเรามีจำนวนเต็มจำนวนตั้งแต่ 1 ถึงจำนวน เรากำหนด การจัดวางที่สวยงาม เป็นอาร์เรย์ที่สร้างโดยตัวเลข num เหล่านี้ได้สำเร็จหากสิ่งใดสิ่งหนึ่งต่อไปนี้เป็นจริงสำหรับตำแหน่ง ith (1 ≤ i ≤ N) ในอาร์เรย์นี้ -

  • ตัวเลขที่ตำแหน่ง ith หารด้วย i ลงตัว

  • i หารด้วยตัวเลขที่ตำแหน่ง ith ลงตัว

ปัญหา

เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่ใช้ตัวเลข num และคืนค่าจำนวนการจัดเรียงที่สวยงามที่เราสามารถสร้างสำหรับ num ได้

ตัวอย่างเช่น หากอินพุตของฟังก์ชันคือ −

const input = 2

จากนั้นผลลัพธ์ควรเป็น −

const output = 2

คำอธิบายผลลัพธ์

การจัดเรียงที่สวยงามครั้งแรกคือ [1,2]:

การจัดเรียงที่สวยงามที่สองคือ [2,1]:

ตัวอย่าง

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

const num = 4;
const countArrangements = (num = 1) => {
   let ans = 0
   const recur = (curr, vis) => {
      if (curr === 1){
         ans++;
      }else{
         for (let i = num; i; i--) {
            let possible = (i % curr === 0 || curr % i === 0);
            let visited = vis & 1 << i;
            if (possible && !visited){
               recur(curr-1, vis | 1 << i);
            }
         }
      }
   };
   recur(num, 0);
   return ans;
};
console.log(countArrangements(num));

คำอธิบายโค้ด:

เรากำหนดตัวแปรผลลัพธ์ (แทน ) แล้วสร้าง ฟังก์ชันแบบเรียกซ้ำ เพื่อนำทางความเป็นไปได้ของการแตกแขนงที่หลากหลาย ฟังก์ชันแบบเรียกซ้ำนี้ต้องการเพียงสองอาร์กิวเมนต์:เรากำลังต้องการวางตัวเลขใด (curr) และจุดใดที่เคยเข้าชมแล้ว (vis)

ผลลัพธ์

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

8