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 相关文章推荐
html中select语句读取mysql表中内容
Oct 09 PHP
PHP mkdir()定义和用法
Jan 14 PHP
php将gd生成的图片缓存到memcache的小例子
Jun 05 PHP
PHP中ob_start函数的使用说明
Nov 11 PHP
php关键字仅替换一次的实现函数
Oct 29 PHP
php截取视频指定帧为图片
May 16 PHP
PHP实现递归目录的5种方法
Oct 27 PHP
浅谈PHP的反射机制
Dec 15 PHP
PHP实现的简单异常处理类示例
May 04 PHP
PHP中Session ID的实现原理实例分析
Aug 17 PHP
php使用fputcsv实现大数据的导出操作详解
Feb 27 PHP
Laravel 框架控制器 Controller原理与用法实例分析
Apr 14 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
《APMServ 5.1.2》使用图解
2006/10/23 PHP
php获取bing每日壁纸示例分享
2014/02/25 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
2017/02/08 PHP
PHP设计模式(一)工厂模式Factory实例详解【创建型】
2020/05/02 PHP
新页面打开实际尺寸的图片
2006/08/25 Javascript
Jquery替换已存在于element上的event的方法
2010/03/09 Javascript
30分钟就入门的正则表达式基础教程
2013/02/25 Javascript
文字溢出实现溢出的部分再放入一个新生成的div中具体代码
2013/05/17 Javascript
html的DOM中document对象images集合用法实例
2015/01/21 Javascript
Vuejs第七篇之Vuejs过渡动画案例全面解析
2016/09/05 Javascript
JavaScript正则表达式实例详解
2016/10/16 Javascript
js时间戳和c#时间戳互转方法(推荐)
2017/02/15 Javascript
简单实现js鼠标跟随效果
2020/08/02 Javascript
IScroll5实现下拉刷新上拉加载的功能实例
2017/08/11 Javascript
基于vue的短信验证码倒计时demo
2017/09/13 Javascript
JavaScript ES6中的简写语法总结与使用技巧
2018/12/30 Javascript
VeeValidate 的使用场景以及配置详解
2019/01/11 Javascript
vue项目中自定义video视频控制条的实现代码
2020/04/26 Javascript
[02:43]中国五虎出征TI3视频
2013/08/02 DOTA
Python实现单词拼写检查
2015/04/25 Python
Python 类与元类的深度挖掘 I【经验】
2016/05/06 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
Python3简单实现串口通信的方法
2019/06/12 Python
python 一个figure上显示多个图像的实例
2019/07/08 Python
基于python进行抽样分布描述及实践详解
2019/09/02 Python
使用matplotlib绘制图例标签中带有公式的图
2019/12/13 Python
python序列化与数据持久化实例详解
2019/12/20 Python
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
2020/07/14 Python
表单button的outline在firefox浏览器下的问题
2012/12/24 HTML / CSS
英国最大的宠物商店:Pets at Home
2019/04/17 全球购物
AMAVII眼镜官网:时尚和设计师太阳镜
2019/05/05 全球购物
将时尚融入珠宝:Adornmonde
2019/10/17 全球购物
新大陆软件面试题
2016/11/24 面试题
元旦促销方案
2014/03/15 职场文书
学生保证书格式
2015/02/27 职场文书
劳保用品管理制度范本
2015/08/06 职场文书