?php
function perm($s, $n, $index)
{
if($n == 0)
{
return '';
}
else
{
$nIndex = count($index); //可用的字符串下标
$res = array();
foreach($index as $i => $v)
{
$tmp = $index;
unset($tmp[$i]); //去掉当前的前缀
/* 调试信息,便于理解
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; //将稍短的排列逐个拼上当前的前缀
}
}
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');
?>
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数据结构与算法教程》、《php程序设计算法总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP常用遍历算法与技巧总结》及《PHP数学运算技巧总结》