Javascript给定了一个数字,我想要所有可能的组合和元素数组
Javascript given a number i want all possible combinations sum element array
在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]]
这是我的代码,但我只有第一个组合!我不知道为什么当我返回递归函数时,同时返回主函数,却不继续使用另一个组合。你能帮我吗?我按照这个找到所有可能的数字组合,以达到给定的总和
$(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。声明var i;你就会得到想要的结果。
开始。仍然需要在显示器上做一些工作
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
<style>
body {background-color:lightgray}
</style>
</head>
<body>
<div id="container"></div>
<button type="button" id="button">Click Me To Calculate combination!</button>
<script>
$(document).ready(function() {
var target = 15;
var array = [3,9,8,4,5,7,10];
var tmpArray = [];
var finalArray = [];
$("#button").click(function() {
sum_up_recursive(array, target, tmpArray);
console.log(finalArray.toString());
var finalText = '';
finalArray.forEach(function(entry) {
finalText = finalText + entry + '</br>';
});
$("#container").html(finalText);
})
function sum_up_recursive(numbers, number, partialArray) {
var s=0;
partialArray.forEach(function(entry) {
s=s+entry;
});
if (s == target) {
//finalArray.push(partialArray);
var res = partialArray.join();
res=res.replace(/,/g , '+');
res= res+"="+s;
console.log(res);
finalArray.push(partialArray);
//$("#container").text(res);
}
if (s >= target) {
return;
}
for (var i=0; i<numbers.length; i++) {
n = numbers[i];
//var remaining = copyArray(cardArray, i+1, cardArray.length-1);
var remaining = [];
var remaining = numbers.slice(i+1);
var partical_arr = partialArray.slice();
partical_arr.push(n);
sum_up_recursive(remaining, target, partical_arr);
}
}
});
</script>
</body>
</html>
相关文章:
- 在多行图表中,在每一行的末尾,我想要一个小圆圈和使用d3.js的端点值
- 我想要相同的函数以两种方式反应
- 如何在javascript中创建一个空的2d数组?下面是我想要创建的一个示例
- 如何用javascript发送多个文件没有jQuery我想要每个文件一个进度条
- 我想要一个类似于网站 https://onlycoin.com/ 的jQuery鼠标滚动动画效果
- 我想要“鼠标滚轮事件延迟”
- 如何格式化我返回的url,使其符合我想要的路由
- 如何使用facet指定我想要的字段
- json_encode($myVar);正在给出地图,我想要一个字符串数组
- 我想要输入类型<输入>在javascript中
- Javascript:我可以't找到正确的方式来表达布尔“;如果“;以得到我想要的结果
- 如何用javascript从数组中删除项?我想要一个类似拉的东西来做与推相反的事情
- 正则表达式对我想要做的事情是正确的吗?
- Javascript给定了一个数字,我想要所有可能的组合和元素数组
- 为什么获胜't我的javascript返回我想要的值
- 我想要获取文件输入并将其保存到本地路径的Javascript
- 我有一系列元素.想要以第一个值作为键分成组
- 单击按钮,我想验证数据,如果为真,我想要删除确认对话框.这可能吗?
- 我如何检查数据表是否包含我想要的值,并可能单击链接
- Ember.js -我想要一个Action事件(on=""),当有一个新的路由转换时触发