例如:如果arr包含[4,6,23,10,1,3],则输出应该返回true,因为4 + 6 + 10 + 3 = 23。该数组不会为空,不会包含所有相同的元素,并可能包含负数。
我的尝试
使用递归方法查找arr的所有排列,并添加元素以查看它们是否合计为数组max。该函数正确检查所有排列,但不返回正确的布尔值。Javascript函数用于确定数组中数字的任意组合是否合计为最大值
function arrayAddition(arr) {
var arrMax = arr.sort(function(a, b) {
return a - b;
}).pop();
function recArrAdd(sub, arr) {
if (arr.length > 0) {
var arrSum = sub.concat(arr[0]).reduce(function(prev, curr) {
return prev + curr;
});
if (arrSum === arrMax) return true;
recArrAdd(sub.concat(arr[0]), arr.slice(1));
recArrAdd(sub, arr.slice(1));
}
return false;
}
return recArrAdd([], arr);
}
console.log(arrayAddition([1, 2, 3]));
@maioman在发布的函数中有'.reduce()'调用! – Pointy
对值有何限制? – sbeliakov
你可以请检查这个链接..类似的问题http://codereview.stackexchange.com/questions/36214/find-all-subsets-of-an-int-array-whose-sums-equal-a-given-target –