【发布时间】:2016-03-10 07:05:28
【问题描述】:
我正在对 Coderbyte 进行挑战,如果对我的问题提供任何建议,我将不胜感激:
给我的挑战: “使用 JavaScript 语言,具有函数 ArrayAdditionI(arr) 获取存储在 arr 中的数字数组并返回字符串 true if 数组中的任何数字组合都可以相加等于 数组中的最大数,否则返回字符串 false。 例如:如果 arr 包含 [4, 6, 23, 10, 1, 3] 输出应该 返回 true 因为 4 + 6 + 10 + 3 = 23。数组不会为空, 不会包含所有相同的元素,并且可能包含负数。 "
我尝试解决的方法:http://jsfiddle.net/reLsg0fg/
function ArrayAdditionI(arr){
var newArr=arr.sort(); // sorted from smallest to largest.
var largestNum=newArr.slice(-1); // Gets the last number, which would be the largest.
var loopArr=arr.sort().pop(); // Takes out the largest number for adding later.
var result=0;
for(var i=0; i<loopArr.length; i++){ // loops through all numbers.
if(result/largestNum !== 1){ //when you divide a number by itself it will be 1.
result+=loopArr[i]; // keep adding each number until get largest number.
}else if(result === largestNum){
return true;
}
}
return false;
}
// TESTS
console.log("-----");
console.log(ArrayAdditionI([4,6,23,10,1,3]));
console.log(ArrayAdditionI([5,7,16,1,2]));
console.log(ArrayAdditionI([3,5,-1,8,12]));
我应该得到真实的,虚假的,真实的。但是我得到了错误,错误,错误,就好像我的循环中有问题一样。 JSFiddle:http://jsfiddle.net/reLsg0fg/
如果有任何建议,我将不胜感激。谢谢^^
【问题讨论】:
-
你的排序是排序字符串,而不是数字。
-
您有 JavaScript 问题还是只想让我们为您解决算法问题?
-
var max = Math.max.apply(0, arr);
-
你为什么用
result/largestNum !== 1而不是result !== largestNum? -
您的循环只是按递增顺序添加数字。它从不尝试跳过某些数字的组合。
标签: javascript arrays