PHP全排列递归算法

function getAllPerm($source) {
    
        $rs = array();
        sort($source);
        $last = count($source) - 1;
        $z = 0;
        $x = $last;
        $rs[] = $source;
 
        while($x > 0) {
        // 相邻的两个元素,先将x的值赋给y,x再自减1
        $y = $x--;
 
        // 如果前一个元素的值小于后一个元素的值
        if($source[$x] < $source[$y])
        {
            // 从尾部开始,找到第一个大于 $x 元素的值  www.it165.net
            $z = $last;
            while($source[$x] > $source[$z])
            {
                $z--;
            }
 
            // 交换 $x 和 $z 元素的值
            list($source[$x], $source[$z]) = array($source[$z], $source[$x]);
 
            // 将 $y 之后的元素全部逆向排列
            for($i = $last; $i > $y; $i--, $y++)
            {
                list($source[$i], $source[$y]) = array($source[$y], $source[$i]);
            }
            $rs[] = $source;
            $x = $last;
        }
    }
    return $rs;
}
 
$source = array('1','2','3');
$rs = getAllPerm($source);
print '<pre>';
print_r($rs);
print '</pre>';


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值