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


Posted in PHP onApril 24, 2019

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

例如,输入字符串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实现字符串的全排列详解

PHP 相关文章推荐
完美解决dedecms中的[html][/html]和[code][/code]问题
Mar 20 PHP
php下将多个数组合并成一个数组的方法与实例代码
Feb 03 PHP
PHP 时间日期操作实战
Aug 26 PHP
php缓冲 output_buffering的使用详解
Jun 13 PHP
php模板原理讲解
Nov 13 PHP
JS异常处理try..catch语句的作用和实例
May 05 PHP
PHP几个实用自定义函数小结
Jan 25 PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
Apr 04 PHP
php实现博客,论坛图片防盗链的方法
Oct 15 PHP
Laravel框架中自定义模板指令总结
Dec 17 PHP
php中目录操作opendir()、readdir()及scandir()用法示例
Jun 08 PHP
Yii框架中使用PHPExcel的方法分析
Jul 25 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
Apr 23 #PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
Apr 23 #PHP
一文掌握PHP Xdebug 本地与远程调试(小结)
Apr 23 #PHP
ThinkPHP3.2.3框架邮件发送功能图文实例详解
Apr 23 #PHP
PHP信号处理机制的操作代码讲解
Apr 19 #PHP
CentOS7编译安装php7.1的教程详解
Apr 18 #PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
Apr 17 #PHP
You might like
ThinkPHP中html:list标签用法分析
2016/01/09 PHP
PHP类的声明与实例化及构造方法与析构方法详解
2016/01/26 PHP
php使用变量动态创建类的对象用法示例
2017/02/06 PHP
学习YUI.Ext 第二天
2007/03/10 Javascript
简单的jquery拖拽排序效果实现代码
2011/09/20 Javascript
基于JQuery的模拟苹果桌面Dock效果(稳定版)
2012/10/15 Javascript
js全屏显示显示代码的三种方法
2013/11/11 Javascript
bootstrap布局中input输入框右侧图标点击功能
2016/05/16 Javascript
jQuery实现手机版页面翻页效果的简单实例
2016/10/05 Javascript
浅谈移动端之js touch事件 手势滑动事件
2016/11/07 Javascript
jQuery模拟完美实现经典FLASH导航动画效果【附demo源码下载】
2016/11/09 Javascript
JS实现的系统调色板完整实例
2016/12/21 Javascript
Node.js如何响应Ajax的POST请求并且保存为JSON文件详解
2017/03/10 Javascript
jQuery实现一个简单的验证码功能
2017/06/26 jQuery
基于JavaScript 性能优化技巧心得(分享)
2017/12/11 Javascript
Vue项目全局配置页面缓存之按需读取缓存的实现详解
2018/08/01 Javascript
Vue computed 计算属性代码实例
2020/04/22 Javascript
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
2020/07/22 Javascript
H5+css3+js搭建带验证码的登录页面
2020/10/11 Javascript
Python获取单个程序CPU使用情况趋势图
2015/03/10 Python
Python pandas用法最全整理
2019/08/04 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
2019/08/28 Python
python实现从wind导入数据
2019/12/03 Python
Python Des加密解密如何实现软件注册码机器码
2020/01/08 Python
pandas创建DataFrame的7种方法小结
2020/06/14 Python
python语言中有算法吗
2020/06/16 Python
Django-Scrapy生成后端json接口的方法示例
2020/10/06 Python
使用PyCharm官方中文语言包汉化PyCharm
2020/11/18 Python
ProBikeKit美国官网:自行车套件,跑步和铁人三项套件
2016/10/13 全球购物
远程Wi-Fi宠物监控相机:Petcube
2017/04/26 全球购物
在线学习西班牙语、法语或其他语言:Babbel.com
2018/02/07 全球购物
库房主管岗位职责
2013/12/31 职场文书
工作推荐信范文
2014/05/10 职场文书
如何写早恋检讨书
2014/09/10 职场文书
出售房屋委托书范本
2014/09/24 职场文书
参加招聘会后的感想
2015/08/10 职场文书