gpt4 book ai didi

php - PHP 中的更改组合/排列算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:41:17 26 4
gpt4 key购买 nike

我很难编写一个接受数组并返回数组数组的函数。我不确定这是否会被视为组合、排列或其他。结果应该与我看到的其他一些排列和组合算法相似,但不完全相同。

假设函数签名是这样的

函数 variable_length_permutations_with_duplicates($set_array, $max_subset_length)

然后这段代码:

$sets = variable_length_permutations_with_duplicates(array('a', 'b'), 2);

应该像这样返回一个数组:

[
['A'],
['一个','一个'],
['a','b'],
['b],
['b','b'],
['b','a'],
]

它确实需要使用数组,因为值可以是任何东西,它们不一定是那个例子中的字符串。返回数组中的子集不需要以任何特定顺序出现。

您是否知道我可以为此使用的任何 PHP 函数或类,或者我可以翻译成 PHP 的另一种语言的引用实现?

最佳答案

您可以使用这段代码——我将函数名称缩短了一点 :) :

function perm($set_array, $max_subset_length, $prefix = []) {
$result = [$prefix];
if ($max_subset_length) {
foreach ($set_array as $el) {
$result = array_merge($result,
perm($set_array, $max_subset_length-1, array_merge($prefix, [$el])));
}
}
return $result;
}

$sets = perm(array('a', 'b'), 2);

print_r($sets);

请注意,在此逻辑中,空数组也包含在结果中。使用 if,您可以在函数的第一行中排除它,如下所示:

    $result = count($prefix) ? [$prefix] : [];

关于php - PHP 中的更改组合/排列算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40115671/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com