来自 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。
假设我有 设置 = [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。