ปัญหา
เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของจำนวนเต็ม, arr เป็นอาร์กิวเมนต์แรกและจำนวนเต็มเดียว เป้าหมาย เป็นอาร์กิวเมนต์ที่สอง
สำหรับจำนวนเต็มแต่ละจำนวนในอาร์เรย์ ฟังก์ชันของเราสามารถกำหนด '+' หรือ '-' ให้กับมันได้
ฟังก์ชันของเราควรค้นหาว่ามีทั้งหมดกี่วิธีในการกำหนด '+', '-' เพื่อให้ผลรวมของจำนวนเต็มของอาร์เรย์เท่ากับผลรวมเป้าหมาย เป้าหมาย
ตัวอย่างเช่น หากอินพุตของฟังก์ชันคือ −
const arr =[1, 1, 1, 1, 1];const target =3;
จากนั้นผลลัพธ์ควรเป็น −
เอาต์พุตคอนสตรัค =5;
คำอธิบายผลลัพธ์:
เพราะทั้ง 5 วิธีคือ −
<ก่อนหน้า>-1+1+1+1+1 =3+1-1+1+1+1 =3+1+1-1+1+1 =3+1+1+1-1+1 =3+1+1+1+1-1 =3ตัวอย่าง
รหัสสำหรับสิ่งนี้จะเป็น −
const arr =[1, 1, 1, 1, 1];const target =3;constwaysToSum =(arr =[], เป้าหมาย =1) => { แผนที่ const ={}; const find =(arr, เป้าหมาย, i) => { ให้ val =i + '->' + เป้าหมาย; if(map[val] !==undefined){ กลับ map[val]; }; if(i ===0){ if (target ===0 &&arr[0] ===0) { return 2 } return arr[0] ===เป้าหมาย || arr[0] ===-target ? 1 :0 }; map[val] =find(arr, target + arr[i], i - 1) + find(arr, เป้าหมาย - arr[i], i - 1); ส่งคืนแผนที่[val] }; ส่งคืน find(arr, target, arr.length-1)};console.log(waysToSum(arr, target));
ผลลัพธ์
และผลลัพธ์ในคอนโซลจะเป็น −
5