结合重复
Combination with repetition
本文关键字:结合 更新时间:2023-09-26
我正在寻找一种方法来获得与数组摄入的所有可能的组合,所以如果我们有[1,2,3]
,它将返回
[1,1,1],[1,1,2],[1,1,3],[1,2,2],[1,2,3],[1,3,3],[2,2,2],[2,2,3],[2,3,3],[3,3,3].
我看了其他几个帖子,比如这里的这个:https://stackoverflow.com/a/9960925/1328107但他们似乎都停止了所有的组合,如
[ 1, 2, 3 ], [ 1, 3, 2 ],[ 2, 1, 3 ], [ 2, 3, 1 ], [ 3, 1, 2 ], [ 3, 2, 1 ].
回溯就可以了:
function combRep(arr, l) {
if(l === void 0) l = arr.length; // Length of the combinations
var data = Array(l), // Used to store state
results = []; // Array of results
(function f(pos, start) { // Recursive function
if(pos === l) { // End reached
results.push(data.slice()); // Add a copy of data to results
return;
}
for(var i=start; i<arr.length; ++i) {
data[pos] = arr[i]; // Update data
f(pos+1, i); // Call f recursively
}
})(0, 0); // Start at index 0
return results; // Return results
}
一些例子:
combRep([1,2,3], 1); /* [
[1], [2], [3]
] */
combRep([1,2,3], 2); /* [
[1,1], [1,2], [1,3],
[2,2], [2,3],
[3,3]
] */
combRep([1,2,3], 3); /* [
[1,1,1], [1,1,2], [1,1,3],
[1,2,2], [1,2,3],
[1,3,3],
[2,2,2], [2,2,3],
[2,3,3],
[3,3,3],
] */
combRep([1,2,3]); /* Same as above */
相关文章:
- javascript结合了数组和字典
- 将Firebase与Electron结合使用
- 结合jQuery和jetpack无限滚动
- 将Angular js与taglib结合使用
- 将图像上传ajax与表单提交ajax相结合
- 将语句与jquery相结合,并使用媒体查询来实现返回页首按钮
- 将broccoliJS与当前使用requireJS的模块化主干应用程序结合使用,我想完全放弃requireJS
- jQuery结合了2个绑定函数(类型错误:a是未定义的)
- 媒体查询与Javascript相结合
- 将Ionic与智能卡(Java卡)结合使用
- 有可能将SYSTEMJS与REQUIREJS结合起来吗
- 将Browserify与Angular JS结合使用--将服务传递到控制器中
- 结合jQuery和普通JS
- 为什么可以'我将谷歌地图getCurrentPosition与地点搜索API相结合
- 如何将纹理打包器与纯javascript结合使用
- 将TypeAhead与jQuery和Bootstrap 2.1结合使用
- javascript结合了公共和私有窗口.onload
- 如何将grunt autoprefixer和grunt sass结合使用
- 如何在不使用css转换的情况下将jQuery animate与css3属性相结合
- 结合onmouseover事件和<a>标签