?php
function perm($s, $n, $index)
{
if($n == 0)
{
return '';
}
else
{
$nIndex = count($index); //可用的字符串下標(biāo)
$res = array();
foreach($index as $i => $v)
{
$tmp = $index;
unset($tmp[$i]); //去掉當(dāng)前的前綴
/* 調(diào)試信息,便于理解
echo "len $n , cur $i , index:\n";
var_dump($tmp);
*/
$ret = perm($s, $n-1, $tmp); //遞歸得到稍短的排列
if($ret != '')
{
foreach($ret as $r)
{
$res[] = $s[$v] . $r; //將稍短的排列逐個拼上當(dāng)前的前綴
}
}
else
{
$res[] = $s[$v];
}
}
return $res;
}
}
function getPerm($s)
{
$n = strlen($s);
$index = range(0, $n-1);
//得到不同長度的排列
for($i=1; $i=$n; $i++)
{
var_dump(perm($s, $i, $index));
}
}
getPerm('abcd');
?>
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計算法總結(jié)》、《php字符串(string)用法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP常用遍歷算法與技巧總結(jié)》及《PHP數(shù)學(xué)運算技巧總結(jié)》