我正在尝试生成一组字符串的所有可能组合,每个字符串最多只能使用一次。
- 输出字符串的长度未定义(最大长度为给定字符串的数量,因为您只能使用它们一次)
- 例如,字符串集
array('A','B')
将生成A、B、AB、BA。 - 例如,字符串集
array('ABC', 'Z')
将生成'ABC'、'Z'、'ZABC'和'ABCZ'。 - 字符串集可以有相同的条目,输出不需要唯一。例如,字符串集
array('A', 'A')
将生成'A'、'A'、'AA'、'AA'; (实际上我不需要重复项,但我不想让事情变得更加困难)
我知道2个字符串有4种组合(2=>4),3=>15,4=>64,5=>325 ...
由于我不是程序员,我发现这至少是“具有挑战性的”。嵌套循环很快就太复杂了。一个更简单的解决方案可能是在带有字符串的数组的索引中找到模式。但这会使我重复使用字符串...
$strings = array('T','O','RS');
$num = 0;
$stringcount = count($strings);
$variations = array(0,1,4,15,64,325,1956,13699,109600,986409);
for($i=0;$i<$variations[$stringcount];$i++){
$index = base_convert($num, 10, $stringcount);
$array_of_indexes = str_split($index);
$out='';
for($j=0;$j<count($array_of_indexes);$j++){
$out .= $strings[$array_of_indexes[$j]];
}
echo $out . '<br />';
$num++;
}
结果: T O RS OT OO ORS RST RSO RSRS OTT OTO OTRS OOT OOO OORS
不好,有很多重复的内容,而且许多有效的组合并没有被包含在内。
我知道这个解决方案在很多方面都是错误的,但我不知道从哪里开始?有什么建议吗?先谢谢!