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

yipeiwu_com7年前PHP代码库

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

例如,输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
思路:
1.利用递归形成递归树,达到深度优先,固定首字母的效果

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

3.回溯法思想

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

<?phpfunction test($str,$start,&$res){    //递归终止条件

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

    }  

    // 

    for($i=$start;$i<strlen($str);++$i){        if($i==$start || $str{$i}!=$str{$start}){

            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"}

相关文章

php文档更新介绍

简单的试用心得如下:   安装pman   使用传说中的pear来安装pman   sudo pear install doc.php.net/pman   如果pear版本比较老,需要...

PHP可变函数的使用详解

PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。 变量函数不能用...

使用WordPress发送电子邮件的相关PHP函数用法解析

使用WordPress发送电子邮件的相关PHP函数用法解析

wp_mail() 函数用来发送邮件,类似于 PHP 的 mail() 函数。 默认的发件人名称是 WordPress,发件人邮箱是类似 wordpress@example.com。 用...

用PHP代替JS玩转DOM的思路及示例代码

事情的起源比较简单,我需要把一个导航页的数据整理好写入数据库。一个比较直观的方法是对html文件进行分析,通用的方法是用php的正则表达式来匹配。但是这样做开发和维护都很困难,代码可读性...

PHP正则匹配操作简单示例【preg_match_all应用】

本文实例讲述了PHP正则匹配操作。分享给大家供大家参考,具体如下: <?php $str = <<< EOT <a href="...