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

นับวิธีกำหนดเครื่องหมาย + - ให้ผลรวมเท่ากับเป้าหมาย (Target Sum) ใน JavaScript

ปัญหา

รับอาร์เรย์ arr และ target แต่ละตัวเลขเลือกเครื่องหมาย + หรือ - จำนวนวิธีที่ผลรวมเท่ากับ target

ตัวอย่าง

const arr = [1, 1, 1, 1, 1]; const target = 3;

5 วิธี: -1+1+1+1+1, +1-1+1+1+1, +1+1-1+1+1, +1+1+1-1+1, +1+1+1+1-1 → 5

โค้ดตัวอย่าง (Memoization / DP)

const arr = [1, 1, 1, 1, 1]; const target = 3; 
const waysToSum = (arr = [], target = 1) => { 
  const map = {}; 
  const find = (arr, target, i) => { 
    let val = i + '->' + target; 
    if(map[val] !== undefined) return map[val]; 
    if(i === 0){ 
      if (target === 0 && arr[0] === 0) return 2; 
      return arr[0] === target || arr[0] === -target ? 1 : 0; 
    } 
    map[val] = find(arr, target + arr[i], i - 1) + find(arr, target - arr[i], i - 1); 
    return map[val]; 
  }; 
  return find(arr, target, arr.length-1); 
}; 
console.log(waysToSum(arr, target));

ผลลัพธ์

5