我正在 coderbyte 上解决这个问题......指令是定义一个函数 ArrayAdditionI(arr),它采用 arr 中的数字数组,如果数组中的任何数字组合可以相加等于最大(否则返回 false)。例如,ArrayAdditionI([4,6,23,10,1,3]) 返回 true,因为 4 + 6 + 10 + 3 = 23。
我编写了以下函数,它似乎可以工作,尽管我认为它不像我希望的那样简洁。我想看看是否有一种方法可以在不涉及 JavaScript 的任何复杂方面的情况下使它更短更甜,即像我在这里所做的那样只使用循环和加法。欢迎任何建议...
function ArrayAdditionI(arr) {
// let's find the largest number
var i,
j,
k,
largest,
result,
length = arr.length - 1,
sorted = [];
sorted = arr.sort(function(a,b) {return a - b});
largest = sorted.pop();
for (i = 0; i < length; i += 1) {
result = sorted[i];
if (result === largest) {
return true;
}
for (j = i + 1; j < length; j += 1) {
result = sorted[i] + sorted[j];
if (result === largest) {
return true;
}
for (k = j + 1; k < length; k += 1) {
result = sorted[i] + sorted[j] + sorted[k];
if (result === largest) {
return true;
}
}
}
}
return false;
}