การจัดวางที่สวยงาม:
สมมติว่าเรามีจำนวนเต็มจำนวนตั้งแต่ 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