【发布时间】:2013-12-27 09:23:55
【问题描述】:
我试图了解数组加法 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;
}
谢谢!
【问题讨论】:
-
完整的
j循环在i循环的每次迭代中运行。 -
Cuberto,感谢您的回复。我还是迷路了。如果 j 循环正在运行 i 循环的每次迭代,那么行 sum += arr[j] 并不总是有意义 if(i != j) 总是这样吗?
-
不,并非总是如此。第一次,
i和j都为 0。然后i为 0 但j为 1。然后i为 0 但j为 2。等等... -
是的!非常感谢。
-
但是为什么是'k'循环?很确定没有它也能正常工作,对吧?
标签: javascript arrays for-loop