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