我正在对Coderbyte进行挑战,如果对我的问题有任何建议,我将不胜感激:
向我提出的挑战:“使用JavaScript语言,使用函数ArrayAdditionI(arr)获取存储在arr中的数字数组,如果数组中的任何数字组合可以加到最大数字中,则返回字符串true . 数组,否则返回字符串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/
我将不胜感激任何建议 . 谢谢^^
4 回答
使用排序数组
这可能不是完整的解决方案,但这里是JavaScript问题:
largestNum
是你算法中的一个数组.sort()
无效同样使用
if(result !== largestNum) {
,分区很昂贵,并且浮点数可能会出现意外结果 .这是你的JavaScript . 但我很确定算法是错误的 - 但我认为这取决于你
请注意,示例
[4, 6, 23, 10, 1, 3] => 4 + 6 + 10 + 3 = 23
不仅仅是将最低值加到最大值来尝试匹配它 .解决问题的可能示例 .
我试图用for循环来解决这个问题,但是我错过了一个事实,即挑战并不是要求所有数字都需要加起来等于最大数量,但如果我们采取的话,也可以加起来最大数量一些数字 . 因此我决定用递归来解决 .
提示:
*首先获得最大数量 .
*对数组进行排序,并删除稍后用于递归的最大数字 .
*创建一个递归函数,检查数字是否加起来最大数,如果没有,检查是否从最大数字中减去数组中的某些数字,它们等于最大数字 .