我正在尝试理解Array Addition CoderByte问题解决方案中的逻辑。这是问题提示 - “使用JavaScript语言,让函数ArrayAdditionI(arr)获取存储在arr中的数字数组,如果数组中的任何数字组合可以加到最大数字,则返回字符串true在数组中,否则返回字符串false。例如:如果arr包含[4,6,23,10,1,3],则输出应返回true,因为4 + 6 + 10 + 3 = 23.数组不会为空,不包含所有相同的元素,并且可能包含负数。“
这是一个有效的解决方案,但我在for循环中迷失了for循环。为什么不总是i = j的情况,因为for循环都以它们的计数器为0开始。那么它不会总是0 = 0吗?
function ArrayAdditionI(arr) {
arr.sort(function(a,b){return a - b})
var largest = arr.pop();
var sum = 0;
for (var i = 0; i < arr.length; i++){
sum += arr[i];
for (var j = 0; j < arr.length; j++){
if (i != j) {
sum += arr[j];
if (sum == largest) {
return true;
}
}
}
for (var k = 0; k < arr.length; k++) {
if (i != k) {
sum -= arr[k];
if (sum == largest) {
return true;
}
}
}
sum = 0;
}
// code goes here
return false;
}
谢谢!
答案 0 :(得分:0)
i_made_that&amp; user3085131:
为了进一步解释k循环,它用于按照最初添加的顺序返回和减去数组值,以产生无法获得的新结果。
如果没有k循环,你就无法解决许多潜在的数组(尽管由于缺乏适当的测试,它实际上会通过coderbyte测试用例)。
考虑[1,2,3,98,100] ......这应该从2 + 98 = 100开始。但是如果没有k循环则不会。如果你记录没有k的sum的结果,你会看到:
3 (1 + 2)
6 (3 + 3)
104 (6 + 98)
3 (2 + 1)
6 (3 + 3)
104 (6 + 98)
4 (3 + 1)
6 (4 + 2)
104 (6 + 98)
99 (98 + 1)
101 (99 + 2)
104 (101 + 3)
然而,对于k循环,在i的第二次迭代中它将通过,因为它将从104减去1,然后从103减去3到达100。
答案 1 :(得分:0)
问题是, for 循环中有2个 循环,其中&#34; i&#34;变量。 变量&#34; i&#34;总是会变为0,直到你完成迭代到内部的2 for循环。
for(var i=0){
for(var j=0){}
for(var k=0){}
}
&#13;