php字符串abc全排列,PHP实现字符串的全排列详解

输入一个字符串,按字典序打印出该字符串中字符的所有排列。

例如,输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

思路:

1.利用递归形成递归树,达到深度优先,固定首字母的效果

2.得复位以后才能再次深度优先

3.回溯法思想

4.一张图和一个运行过程,只能慢慢体会了

if($start==strlen($str)){ $res[]=$str; return;

}

//

for($i=$start;$i

swap($str,$i,$start);var_dump($str.'==='.$start);var_dump($res);sleep(1);

test($str,$start+1,$res);

swap($str,$i,$start);

}

}

return $res;

}function swap(&$str,$a,$b){

if(!is_string($str)) return;

$t=$str{$a};

$str{$a}=$str{$b};

$str{$b}=$t;

}$str="abc";$res=array();//调用入口,从索引0开始

$res=test($str,0,$res);

var_dump($res);

string(7) "abc===0"array(0) {

}string(7) "abc===1"array(0) {

}string(7) "abc===2"array(0) {

}string(7) "acb===1"array(1) {

[0]=> string(3) "abc"}string(7) "acb===2"array(1) {

[0]=> string(3) "abc"}string(7) "bac===0"array(2) {

[0]=> string(3) "abc"

[1]=> string(3) "acb"}string(7) "bac===1"array(2) {

[0]=> string(3) "abc"

[1]=> string(3) "acb"}string(7) "bac===2"array(2) {

[0]=> string(3) "abc"

[1]=> string(3) "acb"}string(7) "bca===1"array(3) {

[0]=> string(3) "abc"

[1]=> string(3) "acb"

[2]=> string(3) "bac"}string(7) "bca===2"array(3) {

[0]=> string(3) "abc"

[1]=> string(3) "acb"

[2]=> string(3) "bac"}string(7) "cba===0"array(4) {

[0]=> string(3) "abc"

[1]=> string(3) "acb"

[2]=> string(3) "bac"

[3]=> string(3) "bca"}string(7) "cba===1"array(4) {

[0]=> string(3) "abc"

[1]=> string(3) "acb"

[2]=> string(3) "bac"

[3]=> string(3) "bca"}string(7) "cba===2"array(4) {

[0]=> string(3) "abc"

[1]=> string(3) "acb"

[2]=> string(3) "bac"

[3]=> string(3) "bca"}string(7) "cab===1"array(5) {

[0]=> string(3) "abc"

[1]=> string(3) "acb"

[2]=> string(3) "bac"

[3]=> string(3) "bca"

[4]=> string(3) "cba"}string(7) "cab===2"array(5) {

[0]=> string(3) "abc"

[1]=> string(3) "acb"

[2]=> string(3) "bac"

[3]=> string(3) "bca"

[4]=> string(3) "cba"}array(6) {

[0]=> string(3) "abc"

[1]=> string(3) "acb"

[2]=> string(3) "bac"

[3]=> string(3) "bca"

[4]=> string(3) "cba"

[5]=> string(3) "cab"}

f8c3a0a3316c64d9fa728e27ae3f6805.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值