在 javascript 代码中,我将元素的所有可能组合,它们的总和给出我想要的数字: 示例:
array = [2, 1, 2, 1];
number = 3;
finalArray = [[2, 1], [2, 1], [1, 2], [2, 1]]
或
array = [5, 5, 4, 4, 2]
number = 10
finalArray = [[5, 5], [4, 4, 2]]
这是我的代码,但我只有第一个组合!我不知道为什么当我返回递归函数时,也返回 main 函数并且它不会继续使用另一个组合。 你能帮我吗?我关注这个Finding all possible combinations of numbers to reach a given sum
$(document).ready(function() {
var numero = 3;
var array = [2, 1, 2, 1];
var tmpArray = [];
var finalArray = [];
$("#button").click(function() {
combinationTableCard(array, numero, tmpArray);
console.log(finalArray);
})
function combinationTableCard(cardArray, number, partialArray) {
var n;
var s = sumArray(partialArray);
if (s == number) {
finalArray.push(partialArray);
}
if (s >= number) {
return;
}
for (i=0; i<cardArray.length; i++) {
n = cardArray[i];
var remaining = copyArray(cardArray, i+1, cardArray.length-1);
partialArray.push(n);
combinationTableCard(remaining, number, partialArray);
}
}
function sumArray(v) {
var total = 0;
if (v.length == 0) {
return total;
} else {
for (i=0; i<v.length; i++) {
total += v[i];
}
return total;
}
}
function copyArray(v, i, j) {
var newV = new Array();
var k = 0;
for(i; i <= j; i++) {
newV[k] = v[i];
k++;
}
return newV;
}
})
最佳答案
在这个函数中,问题是你没有将 i 声明为局部变量,所以它变成了全局变量。函数 combinationTableCard 和 sumArray 使用相同的变量 i。声明变种我;你会得到想要的结果。
关于给定一个数字的Javascript我想要所有可能的组合和元素数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28478009/