gpt4 book ai didi

javascript - JavaScript 中集合的所有可能唯一组合

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:41:50 26 4
gpt4 key购买 nike

我正在构建一个应用程序来测试不同的图标。管理员上传多个图标并输入必须同时显示的图标数量。然后,该应用会按顺序显示所有可能的图标集,直到显示所有图标组合。

现在,我需要一个函数来根据两个数字生成所有独特的图标组合:

  • 图标总数 (i)
  • 每组中的图标数量(s)

如果 i = 6 且 s = 3,我希望输出如下所示:

[
[1, 2, 3],
[1, 2, 4],
[1, 2, 5],
[1, 2, 6],
[1, 3, 4],
[1, 3, 5],
[1, 3, 6],
[1, 4, 5],
[1, 4, 6],
[1, 5, 6],
[2, 3, 4],
[2, 3, 5],
[2, 3, 6],
[2, 4, 5],
[2, 4, 6],
[2, 5, 6],
[3, 4, 5],
[3, 4, 6],
[3, 5, 6],
[4, 5, 6],
]

要求:

  • 所有集合都必须是唯一的
  • 一个数字在一组中只能出现一次

我一直在尝试编写一个递归函数,但我没有任何东西可以展示。我无法理解它:(

最佳答案

基于作为对这个问题的回答给出的想法: Computing all n-sized permutations without repetitions and without "classic" ordering

Then use C++ std::next_permutation like algorithms which work as follows:

  • Go from left and find rightmost one preceeded by zero. Put one in
  • place of zero and sort the rest of array.

免责声明:我的 javascript 非常非常生锈,所以我确信有更优雅的实现方式。

function combine(n, k) {
var result = [];

// initialize array of values
var values = [];
for (var i = 1; i <= n; i++) {
values[i - 1] = i;
}

// initialize permutations
var perm = [];
for (var i = 0; i < n; i++) {
if (i < k) {
perm[i] = 1;
} else {
perm[i] = 0;
}
}
perm.sort();

whileloop:
while (true) {
// save subresult
var subresult = [];
for (var i = 0; i < n; i++) {
if (perm[i] == 1) {
subresult.push(values[i]);
}
}
result.push(subresult);

// get next permutation
for (var i = n - 1; i > 0; i--) {
if (perm[i - 1] == 1) {
continue;
}
if (perm[i] == 1) {
perm[i - 1] = 1;
perm[i] = 0;
perm = perm.slice(0, i).concat(perm.slice(i).sort())
continue whileloop;
}
}

// no additional permutations exist
break whileloop;
}

return result;
}

关于javascript - JavaScript 中集合的所有可能唯一组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35502825/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com