假设我有set=[1,2,3,4,5,6,7]
我想要以下作为回报[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%基于另一个用java编写的Stack Overflow答案。