【发布时间】:2021-10-16 22:24:12
【问题描述】:
需要数组的所有可能组合,包括组合的反转。
例如:
var b = ['a1','b1','a','b'];
需要组合为:
a1,b1,a,b
a1b1,a1a,a1b, b1a1,b1a,b1b, ......,
a1b1a,a1b1b,a1ab1,a1bb1,........,
a1b1ab,a1b1ba.....bab1a1
所有 64 种组合(如果数组有 4 个元素)。 我使用 ArrayList 和 Collection API 在 java 中找到了解决方案,但现在我需要一个纯 JavaScript ES5 解决方案。
我尝试了以下方法,但它只提供了较少的组合。
function getCombinations(chars) {
var result = [];
var f = function (prefix, chars) {
for (var i = 0; i < chars.length; i++) {
result.push(prefix + chars[i]);
f(prefix + chars[i], chars.slice(i + 1));
}
}
f('', chars);
return result;
}
【问题讨论】:
-
你检查过这个了吗? stackoverflow.com/questions/4331092/… 你期望 64 个值是怎么发生的?不应该是 256 吗?
-
我已经浏览过上面的链接,它主要处理多个数组。
-
@Bergi 但是这个当前的问题还包括不同种类的排列。
-
@Bergi 您标记的问题也不是重复的,因为它不包括组合的所有排列。 (我还有一个关于版主单方面标记他们自己回答的重复项的元警告。)
-
@vivek_23 你可能是对的 - 此处所需的结果同时包含
a1b1和b1a1,还包含a1b1ba和bab1a1,它们是排列组合。不过,其他人似乎不见了。
标签: javascript algorithm combinatorics