php实现全排列的算法一步步的优化

给定字符串 ‘abcd’要求把这个字符串的任意组合方式全部打印出来,
实现这个算法用了三个方法一个比一个进步,
1:先分析这个事情是全排列,可能性是 432*1 = 24 所以可知第一个坑4个可能二个坑三个可能
2:循环处理四个坑
3:上方法

/**最终版
 * @param string $s  这个是变化的字符串循环处理这个 从上一个方法的循环可以得到这个,当这个长度为1的时候应该是只是输出
 * @param string $s2 这个是形成的字符串 应该是返回  $s2 . $s[1].$s[2]
 */
function three ($s, $s2 = '') {
    $len = strlen($s);
    if($len <= 1) {
        echo $s2.$s.PHP_EOL;
    } else {
        for ($i = 0; $i< $len; $i++) {
            $lin = str_replace($s[$i], '', $s);
            three($lin, $s2.$s[$i]);
        }
    }
}
进阶版
function two ($s) {
    $a1 = $a2 = $a3 = $a4 = $a5 = [];
    for ($i = 0; $i<strlen($s); $i++) {
        $a1[] = $s[$i];
    }
    foreach ($a1 as $k => $v) {
        $a2 = $a1;
        $str = $v;
        unset($a2[$k]);
        foreach ($a2 as $k1 => $v1) {
            $a3 = $a2;
            $str1 = $v1;
            unset($a3[$k1]);
            foreach ($a3 as $k2 => $v2) {
                $a4 = $a3;
                $str2 = $v2;
                unset($a4[$k2]);
                $str3 = array_pop($a4);
                $a5[] = $str.$str1.$str2.$str3 ;
            }
        }
    }
    return $a5;
}
基础版
function one ($s) {
    $a1 = $a2 = $a3 = [];
    for ($i = 0; $i<strlen($s); $i++) {
        $a1[] = $s[$i];
    }
    foreach ($a1 as $k => $v) {
        $s1 = str_replace($v, '', $s);
        for ($i = 0; $i < strlen($s1); $i++) {
            $a2[] = $v.$s1[$i];
        }
    }
    foreach ($a2 as $k => $v) {
        $lin = [];
        for ($j = 0; $j<strlen($v); $j++) {
            $lin[] = $v[$j];
        }
        $s1 = str_replace($lin,'', $s);
        for ($i = 0; $i < strlen($s1); $i++) {
            $a3[] = $v.$s1[$i].str_replace($s1[$i], '', $s1);
        }
    }
    return $a3;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值