Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

วิธีรับผลรวมเฉพาะใน JavaScript


ปัญหา

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