我会将所有字符放在一个数组中,并编写一个递归函数,它将“删除”所有剩余的字符。如果数组为空,则为引用传递的数组。<?php
$input = "hey";function string_getpermutations($prefix, $characters, &$permutations){
if (count($characters) == 1)
$permutations[] = $prefix . array_pop($characters);
else
{
for ($i = 0; $i
{
$tmp = $characters;
unset($tmp[$i]);
string_getpermutations($prefix . $characters[$i], array_values($tmp), $permutations);
}
}}$characters = array();for ($i = 0; $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。