今天遇到了一个全排列的算法题目,回顾下算法实现。
全排列实现思路:
1. 当需要全排列的元素个数 N = 1 ,则全排列只有它;
2. 当需要全排列的元素个数 N > 1 ,则全排列为 每一个元素 i + 【除 i 之外剩余元素的全排列】的全部情况。
在用程序实现该算法的时候,需要注意用变量保存由 i 组成的一个排列情况。
function func2($arr, $str){ // $str 为保存由 i 组成的一个排列情况
$cnt = count($arr);
if($cnt == 1){
echo $str . $arr[0] . "\n
";
} else {
for ($i = 0; $i < count($arr); $i++) {
$tmp = $arr[0];
$arr[0] = $arr[$i];
$arr[$i] = $tmp;
func2(array_slice($arr, 1), $str . $arr[0]);
}
}
}
$a = array('1', '2', '3', '4');
func2($a, '');
参考资料:
php全排列递归算法代码 http://www.jb51.net/article/31496.htm
PHP一个数组的全排列算法 http://clay.phpme.info/?app=article&id=1290