Допустим, у меня есть
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.
Других решений пока нет …