【发布时间】:2015-12-24 20:06:19
【问题描述】:
例如:如果 arr 包含 [4, 6, 23, 10, 1, 3],则输出应返回 true,因为 4 + 6 + 10 + 3 = 23。数组不会为空,不会包含所有相同的元素,并且可能包含负数。
我的尝试
使用递归方法查找 arr 的所有排列并将元素相加以查看它们是否加起来为数组最大值。该函数正确检查所有排列,但不返回正确的布尔值。
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()调用! -
值有什么限制吗?
-
你能检查一下这个链接吗。。类似的问题codereview.stackexchange.com/questions/36214/…
-
这是一个相关的问题,@SanketBajoria,我在那里添加了答案。
标签: javascript arrays algorithm