เนื่องจากฉันมีอาร์เรย์ของตัวเลขเช่น [14,6,10] - ฉันจะค้นหาชุดค่าผสม/คู่ที่เป็นไปได้ที่สามารถเพิ่มเกินค่าเป้าหมายที่กำหนดได้อย่างไร
ตัวอย่างเช่นฉันมี [14,6,10] ฉันกำลังค้นหาค่าเป้าหมายที่ 40 ผลลัพธ์ที่คาดหวังของฉันจะเป็น
10 + 10 + 6 + 14
14 + 14 + 6 + 6
10 + 10 + 10 + 10
*การสั่งซื้อไม่สำคัญ
จากที่กล่าวมานี่คือสิ่งที่ฉันได้ลองมาแล้ว:
function Sum(numbers, target, partial) {
var s, n, remaining;
partial = partial || [];
s = partial.reduce(function (a, b) {
return a + b;
}, 0);
if (s === target) {
console.log("%s", partial.join("+"))
}
for (var i = 0; i < numbers.length; i++) {
n = numbers[i];
remaining = numbers.slice(i + 1);
Sum(remaining, target, partial.concat([n]));
}
}
>>> Sum([14,6,10],40);
// returns nothing
>>> Sum([14,6,10],24);
// return 14+10
จริงๆ แล้วมันไม่มีประโยชน์เพราะมันจะกลับมาก็ต่อเมื่อสามารถใช้ตัวเลขได้เพียงครั้งเดียวเพื่อสรุปผล
แล้วจะทำยังไงล่ะ?