gpt4 book ai didi

php - 混合任何字符串列表(数组)的算法

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

我需要找出在 php 中生成数组所有组合列表的最佳算法。

我想要原始数组中所有可能的元素组合。重复的问题只需要排列。区别在于我想包括,例如,“22”,而“22”不在该数组的排列数组中的元素中。

这是一个例子:

Input : 1, 2, 3

那么输出就是

Output : 1, 2, 3, 11, 12, 13, 21, 22, 23, 31, 32, 33, 111, 112, 113, 121, 123 ... until 333.

这个问题不同于Finding the subsets of an array in PHP ,因为这道题想要数组的所有组合达到一定长度,而不是数组的所有排列达到一定长度。特别是,链接的问题将永远不会返回“11”或“332”,而这个问题也希望将这些值作为输出。

最佳答案

这个问题可以通过写一个递归函数来解决,在递归函数中,你可以根据较短长度的组合数组来创建一个组合达到一定长度的数组。长度为 1 有一种特殊情况。在这种情况下,组合数组与原始数组相同。对于所有其他长度,我们计算最多比当前长度小 1 的字符串的组合数组,并将当前长度的所有组合相加。

function combi( $arr, $length ) {
if( $length == 1 ) {
return $arr;
} else {
$shorter = combi( $arr, $length - 1 );

$new = Array();
foreach( $shorter as $prefix ) {
if( strlen( $prefix ) == $length - 1 ) {
foreach( $arr as $suffix ) {
$new[] = $prefix . $suffix;
}
}
}

return array_merge( $shorter, $new );
}
}

$a = Array( "1", "2", "3" );

var_dump( combi( $a, count( $a ) ) );

这可能不是最快的方法,因为您将遍历不断增长的列表,而大多数元素与生成新字符串无关。除此之外,如果您的输入不是字符串数组,那么您最终会得到一个混合的字符串数组,无论您开始使用什么类型的元素。

This ideone显示此代码有效。

关于php - 混合任何字符串列表(数组)的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24981153/

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