我会将所有字符放入一个数组中,并编写一个递归函数来“删除”所有剩余的字符。如果数组为空,则给一个引用传递的数组。
<?php
$input = "hey";
function string_getpermutations($prefix, $characters, &$permutations)
{
if (count($characters) == 1)
$permutations[] = $prefix . array_pop($characters);
else
{
for ($i = 0; $i < count($characters); $i++)
{
$tmp = $characters;
unset($tmp[$i]);
string_getpermutations($prefix . $characters[$i], array_values($tmp), $permutations);
}
}
}
$characters = array();
for ($i = 0; $i < strlen($input); $i++)
$characters[] = $input[$i];
$permutations = array();
print_r($characters);
string_getpermutations("", $characters, $permutations);
print_r($permutations);
打印出来:
Array
(
[0] => h
[1] => e
[2] => y
)
Array
(
[0] => hey
[1] => hye
[2] => ehy
[3] => eyh
[4] => yhe
[5] => yeh
)
啊,是的,组合=顺序无关紧要。排列 = 顺序确实很重要。
所以嘿,嘿嘿都是相同的组合,但是如上所述的 3 个单独的排列。注意项目的规模增长非常快。它叫做阶乘,写成 6!= 6*5*4*3*2*1 = 720 项(对于 6 个字符的字符串)。10 个字符的字符串将是 10!= 已经有 3628800 个排列,这是一个非常大的数组。在本例中为 3!= 3 * 2 * 1 = 6。