我将如何在列表中附加所有组合
How would I append all the combinations in a list?
var combinations = function(numArr, choose, callback) {
var n = numArr.length;
var c = [];
var inner = function(start, choose_) {
if (choose_ == 0) {
callback(c);
} else {
for (var i = start; i <= n - choose_; ++i) {
c.push(numArr[i]);
inner(i + 1, choose_ - 1);
c.pop();
}
}
}
inner(0, choose);
}
我不完全确定在完成创建所有组合后如何将所有项目附加到数组中。
我尝试对代码进行一些修改,尽管最终我把它搞砸了。
例:
那么,您是否正在尝试做这样的事情:http://www.geeksforgeeks.org/print-all-possible-combinations-of-r-elements-in-a-given-array-of-size-n/
我发现双循环实现可以很好地完成任务:
function findCombinations(nums, cb) {
var allCombinations = [];
var maxIndex = nums.length - 1;
var i = 0, j = 0;
for (i; i <= maxIndex; i += 1) {
for (j = i; j <= maxIndex; j += 1) {
if (i !== j) {
allCombinations.push([ nums[i], nums[j] ]);
}
}
}
cb(allCombinations);
}
findCombinations([1, 2, 3, 4], function (combinations) {
console.log(combinations);
});
打印输出:
[ [ 1, 2 ], [ 1, 3 ], [ 1, 4 ], [ 2, 3 ], [ 2, 4 ], [ 3, 4 ] ]
您是否专门尝试实现递归树?
如果这是正确的输出,我让它与您的解决方案进行小修复。你的方法是完全正确的。你只需要考虑你什么时候开始/结束一个组合。当组合结束时,您需要将当前组合推送到外部阵列。您的基本情况表示组合何时完成,此时您需要推送当前组合的副本。
> combinations([0,1,2,3],2)
[ [ 0, 1 ],
[ 0, 2 ],
[ 0, 3 ],
[ 1, 2 ],
[ 1, 3 ],
[ 2, 3 ] ]
> combinations([0,1,2,3],3)
[ [ 0, 1, 2 ],
[ 0, 1, 3 ],
[ 0, 2, 3 ],
[ 1, 2, 3 ] ]
这是调整后的解决方案。如果您愿意,可以在c
上使用回调。
function combinations(numArr, choose, callback) {
var n = numArr.length;
var c = [];
var temp = [];
var inner = function(start, choose_) {
if (choose_ === 0) {
c.push(temp.slice());
} else {
for (var i = start; i <= n - choose_; i++) {
temp.push(numArr[i]);
inner(i + 1, choose_ - 1);
temp.pop();
}
}
}
inner(0, choose);
return c;
}
相关文章:
- 接受不在列表中的值-引导组合框
- Extjs 3.4如何强制组合框重新加载其下拉列表
- Extjs 4.2.1滚动到组合下拉列表中的选择
- 将带有方括号的字符串转换为组合方括号内容的列表
- 在下拉列表中显示树的组合框
- 验证 2 个下拉列表(只有某些组合有效)
- 在XMPP pubsub中,订阅者可以检索订阅列表或将其与MUC组合
- 如何从多维数组填充列表框(组合框)
- Jquery:需要检查组合框中的值列表
- Angularjs :从列表中选择组合
- 在HTML表中搜索-组合多个值(下拉列表、文本字段)
- 在列表出现后,是否可以从ZK组合框中删除焦点
- 在视图中使用compile in指令和ng repeat的组合会阻止正确更新范围元素列表
- 我将如何在列表中附加所有组合
- 按值获取下拉列表/组合框的索引(客户端)
- 从带有输入框列表的Angular自定义指令中获取组合字符串
- 引导程序下拉列表中的剑道组合框
- 组合日期,从月和年列表中获得天数基础
- 隐藏extjs组合框的下拉列表
- ExtJs多选组合框与复选框列表