博主信息
博文 15
粉丝 0
评论 0
访问量 32233
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
php给定一个字符串,输出字符串的所有排列
陈序员的博客
原创
1593人浏览过

题目为: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举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学