我正在尝试生成一组字符串的所有可能组合,每个字符串最多使用一次。
- 未定义输出字符串的长度(最大长度是给定字符串的数量,因为您只能使用一次)
- 例如,字符串集
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
不好,不包括许多重复+许多有效组合
我知道这个解决方案在很多方面都是错误的,但我不知道从哪里开始?有什么建议么?提前谢谢!