並べ替えと組合せ
1280 ワード
並べ替えや組み合わせには飽きてきたが、毎回簡単には終わらなかった.この機会に暗記しましょう.
シーケンス(繰り返し可能)、コンビネーション(繰り返し可能比)
シーケンス(繰り返し可能)、コンビネーション(繰り返し可能比)
function permutations(arr, n) {
let result = [];
if (n === 1) {
return arr.map((item) => [item]);
} else {
arr.forEach((fixed, index, arr) => {
const rest = arr.filter((_, idx) => idx !== index);
const perms = permutations(rest, n - 1);
const combine = perms.map((v) => [fixed, ...v]);
result.push(...combine);
});
}
return result;
}
console.log(permutations([1, 2, 3, 4, 5, 6], 2));
=>1の場合,[1][2]...彼を出させる.fixedを除き,n−1は再帰する.得られた結果をfixedと組み合わせて配列に保存します.
function combinations(arr, n) {
let result = [];
if (n === 1) {
return arr.map((item) => [item]);
} else {
arr.forEach((fixed, idx, arr) => {
// 현재 요소 뒤 부터 적용
const rest = arr.slice(idx + 1);
const combis = combinations(rest, n - 1);
const combine = combis.map((v) => [fixed, ...v]);
result.push(...combine);
});
}
return result;
}
console.log(combinations([1, 2, 3, 4, 5, 6], 2));
=>1の場合,[1][2]...彼を出させる.fixedを除き,n−1は再帰する.得られた結果をfixedと組み合わせて配列に保存します.他のセクションがある場合はrestを求めるときに、現在のインデックスの後ろにある要素に追加するのではなく、他の要素を除外するようにインデックスを構成します.Reference
この問題について(並べ替えと組合せ), 我々は、より多くの情報をここで見つけました https://velog.io/@lsa3163/순열과-조합テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol