php每日小知识-字符串全排列算法

版权声明:让我们一起享受这神奇的0和1吧 https://blog.csdn.net/eebaicai/article/details/83035000
//从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函数
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/eebaicai/article/details/83035000