//从php中文网学习
//字符串全排列算法
/*全排列就是从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列,当m=n时所有的排列情况叫全排列。*/
$str = '123';
// 字符串转换为数组
$arr = str_split($str);
// 调用perm函数
perm($arr, 0, count($arr)-1);
/**
* 定义perm函数
* @param [array] $arr // 排列的字符串
* @param [int] $default // 初始值
* @param [int] $max // 最大值
*/
function perm(&$arr, $default, $max) {
// 初始值是否等于最大值
if ($default == $max) {
// 将数组转换为字符串
echo join('', $arr), PHP_EOL;
} else {
// 循环调用函数
for ($i = $default; $i <= $max; $i++) {
// 调用swap函数
swap($arr[$default], $arr[$i]);
// 递归调用自己
perm($arr, $default + 1, $max);
// 再次调用swap函数
swap($arr[$default], $arr[$i]);
}
}
}
function swap(&$a, &$b) {
$c = $a;
$a = $b;
$b = $c;
}
str_split函数
count函数
&引用
在PHP 中引用的意思是:不同的名字访问同一个变量内容
//第二种实现的方法
function perm($arr, $str){ // $str 为保存由 i 组成的一个排列情况
$cnt = count($arr);
if($cnt == 1){
echo $str . $arr[0] .PHP_EOL;
} else {
for ($i = 0; $i < count($arr); $i++) {
$tmp = $arr[0];
$arr[0] = $arr[$i];
$arr[$i] = $tmp;
perm(array_slice($arr, 1), $str . $arr[0]);
}
}
}
$a = array('1', '2', '3', '4');
perm($a, '');
array_slice函数