我需要獲取與目標相等的數組項的總和。如果數組項的總和不等於目標,我希望得到小於目標的最高總和。獲取等於目標的數組項的總和(子集總和)
下面是一個例子:
輸入: [4,6,8,12,4,6,6,12,4,4,4]
結果: [ ] [] [8,4] [6,6] [4,4,4] [6,4]
注:陣列項只能使用一次。
目前這裏是我現在所擁有的:
var subset_sum = function (items, target) {
var results = [];
items.sort(function (a, b) { return b - a });
ss = function (items) {
var item = items.shift();
if (item < target) {
var perms = [];
perms.push(item);
var isItemPush = false;
var counter = 0
var innerSubset = function() {
if (item + items[counter] === target) {
perms.push(items[counter])
items.splice(counter, 1);
results.push(perms);
isItemPush = true;
} else {
if (counter < items.length) {
counter += 1;
innerSubset();
}
}
}
innerSubset();
} else {
results.push(item);
}
if (items.length === 0) {
return results;
}
return ss(items);
}
return ss(items)
}
window.onload = function() {
var items = [4, 6, 8, 12, 4, 6, 6, 12, 4, 4];
target = 12;
result = subset_sum(items, target);
console.log(result);
}
這種方法的問題是,它僅僅是一維或二維。從上面的例子,它不返回的結果[4,4,4]和6
是在你的示例中,目標12?我真的不知道你的輸入如何產生這些結果。你能一步一步展示嗎? – Sionnach733
是我的例子中目標是12。例如:如果我當前的項目是4,我將循環數組中的其他項目,並查找一個數字,一旦添加到當前項目,結果將等於12這是目標。如果您需要更多示例,請告訴我。 – Pinoy2015
但是如果原始數組中只有3個數字4的實例,結果如何包含[8,4]和[4,4,4]? – Strille