博客列表 >php给定一个字符串,输出字符串的所有排列

php给定一个字符串,输出字符串的所有排列

陈序员的博客
陈序员的博客原创
2020年06月04日 21:38:581304浏览

题目为:php给定一个字符串,输出字符串的所有排列,例如给定字符串abc,打印出a,b,c所能排列出的所有组合abc,acb,bac,bca,cab,cba


方法一:https://blog.csdn.net/cplasfc3/article/details/80920805


/**

 * 输入一个字符串,打印出该字符串中字符的所有排列

 * @param unknown $arr    字符串转化的数组

 * @param unknown $start  开始位置

 * @param unknown $len  字符串长度

 */

 

function test3(&$arr,$start,$len){

    if ($start== $len){

        //echo join('', $arr),PHP_EOL;

    }else {

        for ($i=$start;$i<=$len;$i++){

            test4($arr[$start],$arr[$i]);

            test3($arr, $start+1,$len);

            test4($arr[$start],$arr[$i]);

        }

    }

}

 

/**

 * 字符交换位置

 * @param unknown $a

 * @param unknown $b

 */

 

function test4(&$a,&$b){

    $tmp = $a;

    $a = $b;

    $b = $tmp;

}

$str = 'abcd';

$arr = str_split($str);

$len = count($arr)-1;

test3($arr,0, $len);


方法二: 详见https://ask.csdn.net/questions/364494


function combine($arr, $m, $isRepeat = 0, $b = [], $n = 0, $res = []) {

    !$n && $n = $m;

    if($m == 1) {

        foreach($arr as $item)

            //拼接中间变量到数组中去

            $res[] = array_merge($b, [$item]);

    } else {

        foreach($arr as $key => $item) {

            $b[$n - $m] = $item;

            $tmp = $arr;

            if(!$isRepeat) unset($tmp[$key]);// 如果不可重复

            $res = combine($tmp, $m-1, $isRepeat, $b, $n, $res);

        }

    }

    return $res;

}

$str = 'abc';

$sort_arr = combine(str_split($str), strlen($str));

print_r($sort_arr);

foreach ($sort_arr as $key => $value) {

    echo implode('', $value),PHP_EOL;

}


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议