gpt4 book ai didi

javascript - 找到最多 n 个数组项的所有组合,并且数组项可以重复

转载 作者:行者123 更新时间:2023-12-04 03:22:35 25 4
gpt4 key购买 nike

我有像 ['PP', 'PT, 'CK'] 这样的数组。我有n号。例如它是 4。我想生成最多 4 个数组项的所有组合,所以输出将类似于下面的所有组合

[['PP', 'PP', 'PP', 'PP'],

['PP', 'PP', 'PP', 'PT'],

['PP', 'PP', 'PT', 'PT'],

['PP', 'PT', 'PT', 'PT'],

['PT', 'PT', 'PT', 'PT'],

['PP', 'PP', 'PP', 'CK'],

['PP', 'PP', 'CK', 'CK'],

['PP, 'CK', 'CK', 'CK'],

['CK', 'CK', 'CK', 'CK'],

['PT', 'CK', 'CK', 'PP'],

['PT', 'PT', 'CK', 'PP],

['PT', 'PT', 'PT', 'CK']]

我试着写下面的代码,但它没有给我预期的输出

const getCombination = (arr, n) => {
const list = [];
if (arr.length === 1) {
const items = [];
for (let t = 0; t < n; t++) {
items.push(arr[0]);
}
list.push(items);
return list;
}
for (let i = n; i >= 0; i--) {
let k = i;
const items = [];
while (k > 0) {
items.push(arr[0]);
k--;
}
if (i === n) {
list.push(items);
continue;
}
let c = n - i;
let val = 1;
if (i === 0) {
val = 0;
}
for (let j = val; j < arr.length; j++) {
const op = [...items];
const l = arr[j];
let p = 0;
let isRun = false;
if (j === 0) {
continue;
}
while (p < c && items.length < n) {
op.push(l);
p++;
isRun = true;
}
if (isRun) list.push(op);
}
}
return list;
}

console.log("list", getCombination(["PP", "PT", "CK"], 4));

最佳答案

您可以采用递归,它返回一个数组,其中最后一项带有剩余计数,或者迭代实际元素的可能计数数。

然后将新数组的映射结果推送到结果集中。

Result with unique count of items.

PP PP PP PP
PP PP PP PT
PP PP PP CK
PP PP PT PT
PP PP PT CK
PP PP CK CK
PP PT PT PT
PP PT PT CK
PP PT CK CK
PP CK CK CK
PT PT PT PT
PT PT PT CK
PT PT CK CK
PT CK CK CK
CK CK CK CK

const
getCombinations = ([item, ...array], n) => {
if (!array.length) return [Array(n).fill(item)];

const result = [];
let m = n;

do {
const left = Array(m).fill(item);
result.push(...getCombinations(array, n - m)
.map(right => [...left, ...right])
);
} while (m--);

return result;
},
result = getCombinations(["PP", "PT", "CK"], 4);

result.forEach(a => console.log(...a));
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 找到最多 n 个数组项的所有组合,并且数组项可以重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68183640/

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