我想在程序中实现打印字符串的全排列,代码如下
function output ($src_arr)
{
foreach ($src_arr as $key => $value) {
$temp_arr = $src_arr;
echo $value;
if (! empty($temp_arr)) {
array_splice($temp_arr, $key, 1);
output($temp_arr);
return;
} else {
echo "<br/>";
return;
}
}
}
$str = 'abc';
$src_arr = str_split($str);
output($src_arr);
但是结果只是打印abc,我想问一下究竟是什么原因,我感觉没什么问题,请大神指教!
------解决思路----------------------
$a = array(1,2,3);如果按引用传递原始数组则
perm($a, 0, count($a)-1);
function perm($ar, $k, $m) {
if($k == $m) echo join('',$ar), PHP_EOL;
else {
for($i=$k; $i<=$m; $i++) {
swap($ar[$k], $ar[$i]);
perm($ar, $k+1, $m);
}
}
}
function swap(&$a, &$b) {
$c = $a;
$a = $b;
$b = $c;
}
$a = array(1,2,3);这个思路要比你的清晰吧?(移植的 C 代码)
perm($a, 0, count($a)-1);
function perm(&$ar, $k, $m) {
if($k == $m) echo join('',$ar), PHP_EOL;
else {
for($i=$k; $i<=$m; $i++) {
swap($ar[$k], $ar[$i]);
perm($ar, $k+1, $m);
swap($ar[$k], $ar[$i]);
}
}
}
function swap(&$a, &$b) {
$c = $a;
$a = $b;
$b = $c;
}