เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของตัวเลขเป็นอาร์กิวเมนต์แรก และตัวเลขเดียวเป็นอาร์กิวเมนต์ที่สอง ฟังก์ชันควรเลือกสมาชิกจากอาร์เรย์ที่เมื่อบวกกันจะได้ผลรวมที่ระบุโดยอาร์กิวเมนต์ที่สองของอาร์เรย์ ฟังก์ชันควรคืนค่าอาร์เรย์ของซับอาร์เรย์ทั้งหมดของตัวเลขที่เมื่อบวกกันจะได้ผลรวมที่ต้องการ
สังเกตว่าลำดับไม่สำคัญ และถ้าจำเป็น เรามีเสรีภาพที่จะใช้ตัวเลขหนึ่งตัวมากกว่าหนึ่งครั้งเพื่อสร้างผลรวม
เช่น ถ้าอาร์เรย์อินพุตและผลรวมคือ:
const arr = [14, 6, 10]; const sum = 40;
ผลลัพธ์ควรเป็น:
const output = [ [ 14, 14, 6, 6 ], [ 14, 6, 10, 10 ], [ 6, 6, 6, 6, 6, 10 ], [ 10, 10, 10, 10 ] ];
ตัวอย่าง
const arr = [14, 6, 10];
const sum = 40;
const findSum = (arr, sum) => {
const res = [];
const search = (index, part = []) => {
const s = part.reduce((a, b) => a + b, 0);
if (s === sum){
res.push(part)
};
if (s >= sum || index >= arr.length){ return; };
search(index, part.concat(arr[index]));
search(index + 1, part);
};
search(0);
return res;
}
console.log(findSum(arr, sum));
ผลลัพธ์
สิ่งนี้จะให้ผลลัพธ์ดังนี้:
[ [ 14, 14, 6, 6 ], [ 14, 6, 10, 10 ], [ 6, 6, 6, 6, 6, 10 ], [ 10, 10, 10, 10 ] ]