Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

หาตัวเลขในอาร์เรย์ที่รวมกันได้ค่าเป้าหมายใน JavaScript

เราต้องเขียนฟังก์ชัน 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 ]
]