並べ替えと組合せ


並べ替えや組み合わせには飽きてきたが、毎回簡単には終わらなかった.この機会に暗記しましょう.
シーケンス(繰り返し可能)、コンビネーション(繰り返し可能比)
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を求めるときに、現在のインデックスの後ろにある要素に追加するのではなく、他の要素を除外するようにインデックスを構成します.