Trying to generate all permutations from array but only getting a small subset(尝试从数组生成所有排列,但仅获得很小的子集)
本文介绍了尝试从数组生成所有排列,但仅获得很小的子集的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
编辑:我会尽量在这个问题中说得更清楚:
我有这个数组[1,2,3]
,我想生成所有排列,如下所示:
1,2,3|1,3,2|3,2,1|3,1,2|2,3,1|2,1,3|1|1,2|1,3|2|2,3|2,1|3|3,1|3,2
请注意,我们还需要一位数和两位数的排列,建议的副本中未涉及这一点。
我尝试使Python代码适应JavaScript:
function my_permutations(lst) {
if (lst.length == 0) {
return []
}
if (lst.length == 1) {
return [lst]
}
var l = []
var m;
var remLst;
for (var i = 0; i < lst.length; i++) {
m = lst[i]
remLst = lst.slice(0, i).concat(lst.slice(i + 1))
my_permutations(remLst).forEach(function(element) {
l.push([m].concat(element))
});
}
return l
}
console.log(JSON.stringify(my_permutations([1, 2, 3])))
使用代码中的新编辑,我可以获得所有三元组的组合!但是我想要更多,我想要双胞胎和单胞胎的组合。我如何才能做到这一点?
以是不会生成所有可能的组合。
如何修复此问题?
推荐答案
这里有一个解决方案
这几乎实现了您想要的效果。问题是它包含一个空数组:(
function my_permutations(lst) {
var l = [[]]
var m;
var remLst;
for(var i = 0; i < lst.length; i++) {
m = lst[i]
remLst = lst.slice(0, i).concat(lst.slice(i + 1))
my_permutations(remLst).forEach(function(element){
l.push([m].concat(element))
})
}
return l
}
console.log(my_permutations([1, 2, 3]))
这里有另一种方法
它的效率肯定不高,而且使用了很多新的javascript功能,但我认为它很巧妙。
const rotations = ([l, ...ls], right=[]) =>
l ? [[l, ...ls, ...right], ...rotations(ls, [...right, l])] : []
const permutations = ([x, ...xs]) =>
x ? permutations(xs).flatMap((p) => rotations([x, ...p])) : [[]]
const powerset = (xs) =>
xs.reduce((ys, x) => [...ys, ...ys.map((y) => [x, ...y])], [[]])
const powerPermutations = (xs) =>
powerset(xs).flatMap(permutations)
console.log(powerPermutations([1, 2, 3]))
这篇关于尝试从数组生成所有排列,但仅获得很小的子集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:尝试从数组生成所有排列,但仅获得很小的子集


猜你喜欢
- addEventListener 在 IE 11 中不起作用 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- 400或500级别的HTTP响应 2022-01-01
- Flexslider 箭头未正确显示 2022-01-01
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- Fetch API 如何获取响应体? 2022-01-01
- 失败的 Canvas 360 jquery 插件 2022-01-01