Javascript数组添加 - 所有组合
Javascript array addition - all combinations
我正在解决Coderbyte的数组添加问题:
使用 JavaScript 语言,让函数
ArrayAdditionI(arr)
获取存储在arr
中的数字数组,如果数组中的任何数字组合可以相加等于数组中的最大数字,则返回字符串 true,否则返回字符串 false。例如:如果arr
包含[4, 6, 23, 10, 1, 3]
则输出应返回 true,因为4 + 6 + 10 + 3 = 23
.数组不会为空,不会包含所有相同的元素,并且可能包含负数。
我已经提出了下面的解决方案,但由于某种原因,无法使递归起作用。该代码正确标识数组,其中剩余(非最大)数组元素的加起来恰好是最大的数组元素,否则会失败。有什么建议吗?
function ArrayAdditionI(arr) {
arr = arr.sort(function(a,b) {return b-a});
match = false;
largest = arr.shift(arr[0]);
function test(a){
if(eval(a.join("+"))==largest){
match = true;
return match}
else {
for(i = 0; i < a.length; i++){
newArr = a.slice();
newArr.splice(i,1);
return test(newArr);
}
}
}
test(arr);
return match;
}
eval
是邪恶的。在几乎所有情况下,它都可以在没有eval
的情况下完成,而且会更快,可能更安全。你
eval(a.join("+"))
可以写成
a.reduce(function(a, b) { return a + b; })
现在这已经解决了:你的递归有效。您的循环没有。在循环的第一遍中,您已经返回了结果,因此每次递归中循环的第二次、第三次等迭代永远不会发生。
以下是稍作更改的代码:
function ArrayAdditionI(arr) {
arr.sort(function(a,b) {return b-a;});
var largest = arr.shift();
function test(a) {
var sum = a.reduce(function(a, b) { return a + b; }, 0);
if (sum == largest) {
return true;
} else {
for (var i = 0; i < a.length; i++) {
var newArr = a.slice();
newArr.splice(i,1);
if (test(newArr)) {
return true;
}
}
return false;
}
}
return test(arr);
}
var result = ArrayAdditionI([4, 6, 23, 10, 1, 3]);
document.getElementById('result').textContent = result;
<div id="result"></div>
您也可以
通过将两个函数分开并在for loop
内检查test
函数来执行此操作:
function ArrayAdditionI(arr) {
arr.sort(function(a,b) {return b-a;});
var largest = arr.shift();
return test(arr,largest);
}
function test(a,largest) {
if (eval(a.join("+")) == largest) {
return true;
} else {
for (var i = 0; i < a.length; i++) {
var newArr = a.slice();
newArr.splice(i,1);
if (test(newArr,largest)) {//check if test returns true then only return from this method otherwise the last line will return false after whole execution
return true;
}
}
return false;
}
}
var ar=[4, 6, 23, 10, 1, 3];
var result = ArrayAdditionI(ar);
alert(result);
相关文章:
- 根据id将json数组组合为一个json数组
- jqueryeasyui使用子数组组合数据
- javascript数组中条目的成对组合
- 将数组中的所有数字组合相加
- JavaScript算法,提供每种可能的项目组合,并将它们存储在数组中
- 将两个数组合并为一个具有键值关系的数组
- 如何将数组的对象与同一索引组合
- 将对象隐藏到组合/对象数组
- 为什么我的jQuery.map不能在这里组合我的数组
- 组合/匹配数组
- Javascript数组添加 - 所有组合
- 使用具有特定条件的 lodash 添加和组合对象数组中的重复项
- 将数组组合到一个对象中
- Javascript将JSON放入数组中,组合并在其他地方使用
- 在 JavaScript 对象中组合来自不同属性的数组项
- JavaScript for in - 从主对象获取、组合和处理数组
- 在数组中的一组标识符中组合 2 个值
- 组合 JavaScript 数组
- 在 JavaScript 中组合两个字符串数组
- 使用数组和对象的组合循环访问数据