เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่ใช้จำนวนบวก เช่น num เป็นอาร์กิวเมนต์เดียว
ฟังก์ชันควรหาการรวมกันของตัวเลขกำลังสองสมบูรณ์ซึ่งเมื่อบวกแล้วให้ตัวเลขที่ให้ไว้เป็นอินพุต เราต้องทำให้ใช้จำนวนกำลังสองสมบูรณ์น้อยที่สุดเท่าที่จะทำได้
ตัวอย่างเช่น −
หากหมายเลขอินพุตคือ −
const num = 123;
จากนั้นผลลัพธ์ควรเป็น −
const output = 3;
เพราะ 123 =121 + 1 + 1
นี่เป็นปัญหาคลาสสิกของ Dynamic Programming ที่เราสามารถเข้าถึงผลลัพธ์สำหรับตัวเลขเฉพาะตามผลลัพธ์ของตัวเลขก่อนหน้าได้
ก่อนข้ามไปที่โค้ด ให้พยายามทำความเข้าใจรูปแบบทั่วไปก่อน และว่าจริง ๆ แล้ว DP จะช่วยเราในการวางแผนโซลูชันได้อย่างไร
ผลลัพธ์สำหรับหกห้าตัวเลขจะเป็น -
1 --> 1 (1) 2 --> 2 (1 + 1) 3 --> 3 (1 + 1 + 1) 4 --> 1 (4) 5 --> 2 (4 + 1) 6 --> 3 (4 + 1 + 1)
นี่แสดงให้เห็นชัดเจนว่าเราต้องพยายามและพยายามรวมกันในผลลัพธ์ก่อนหน้าเพื่อให้ได้ผลลัพธ์ที่ประสบความสำเร็จ
ตัวอย่าง
ต่อไปนี้เป็นรหัส -
const num = 123; const sumSquares = (num) => { let arr = new Array(num + 1).fill(0); arr[1] = 1; for(let i = 1; i * i <= num; i++) { for(let j = i * i; j < arr.length; j++) { if(arr[j] == 0) { arr[j] = arr[j - (i * i)] + 1; } else { arr[j] = Math.min(arr[j - (i * i)] + 1, arr[j]); } } }; return arr[num]; }; console.log(sumSquares(num));
ผลลัพธ์
ต่อไปนี้เป็นเอาต์พุตคอนโซล -
3