来自 set/array 的每个(特定大小的)组合,没有重复项

Every (specific sized) combination from set/array with no duplicate items

假设我有 设置 = [1, 2, 3, 4, 5, 6, 7]

我想要 return 中的以下内容 [1, 2, 3, 4, 5] [4, 3, 2, 1, 6] [7, 5, 1, 3, 2]........

本质上,正如标题所述,我希望从数组中生成特定大小的组合,但每个组合不能有任何重复项(所以没有 aaab,aaac,如果你明白的话)。

我在这里也发现了另一个问题,但它在组合中有欺骗。我试过调整和编写递归函数无济于事:/

好的 - 所有可能的子集都没有重复,并且假设顺序无关紧要,即 [1, 2, 3, 4, 5][5, 4, 3, 2, 1] 相同。简约示例:

<?php
$arr = array(1, 2, 3, 4, 5, 6, 7);

function getSubsets($set, $items) {
  $result = array();
  getSubsets2($set, $items, 0, array(), $result);
  return $result;
}

function getSubsets2($set, $items, $index, $current, &$result) {
  if (sizeof($current) === $items) {
    $result[] = $current;
    return;
  }
  if ($index < sizeof($set)) {
    getSubsets2($set, $items, $index + 1, $current, $result);
    $current[] = $set[$index];
    getSubsets2($set, $items, $index + 1, $current, $result);
  }
}

$subsets = getSubsets($arr, 5);

echo(sizeof($subsets)); // 21
?>

不抢别人的桂冠:这是100%基于another Stack Overflow answer written in java