Количество перестановок строки длиной N
равно N!
Так что, если вы просто ищете количество перестановок, это будет делать:
function factorial($n) {
if( $n == 0) return 1;
if( $n < 3) return $n;
return $n*factorial($n-1);
}
function permute($str) {
return factorial(strlen($str));
}
Если, однако, вы пытаетесь получить случайную одну из этих перестановок, попробуйте это:
function permute($str) {
$l = strlen($str);
$a = str_split($str);
$ret = "";
while($l > 0) {
$i = rand(0,$l-1);
$ret .= $a[$i];
array_splice($a,$i,1);
$l--;
}
return $ret;
}
Если вы пытаетесь перебрать все N!
перестановки, попробуйте:
ini_set("memory_limit",-1);
set_time_limit(0);
// your brute-force code here
Если ни один из них не ответит на ваш вопрос, уточните;)