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 相关文章推荐
如何限制访问者的ip(PHPBB的代码)
Oct 09 PHP
浅谈PHP 闭包特性在实际应用中的问题
Oct 30 PHP
php站内搜索并高亮显示关键字的实现代码
Dec 29 PHP
php使用base64加密解密图片示例分享
Jan 20 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
Jul 01 PHP
php实现Mongodb自定义方式生成自增ID的方法
Mar 23 PHP
php实现每天自动变换随机问候语的方法
May 12 PHP
php版微信公众平台接口开发之智能回复开发教程
Sep 22 PHP
Zend Framework路由器用法实例详解
Dec 11 PHP
PHP判断是否微信访问的方法示例
Mar 27 PHP
php的命名空间与自动加载实现方法
Aug 25 PHP
PHP读取文件或采集时解决中文乱码
Mar 09 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
PHP 模拟登陆MSN并获得用户信息
2009/05/16 PHP
php实现的一个很好用HTML解析器类可用于采集数据
2013/09/23 PHP
PHP简单生成缩略图相册的方法
2015/07/29 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
JavaScript判断变量是否为undefined的两种写法区别
2013/12/04 Javascript
jquery ajax传递中文参数乱码问题及解决方法说明
2014/02/07 Javascript
纯js实现div内图片自适应大小(已测试,兼容火狐)
2014/06/16 Javascript
基于JavaScript实现手机短信按钮倒计时(超简单)
2015/12/30 Javascript
手机端点击图片放大特效PhotoSwipe.js插件实现
2016/08/24 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
2016/11/07 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据
2017/04/22 Javascript
Angular.js中定时器循环的3种方法总结
2017/04/27 Javascript
微信小程序 获取session_key和openid的实例
2017/08/17 Javascript
layer子层给父层页面元素赋值,以达到向父层页面传值的效果实例
2017/09/22 Javascript
Angularjs中的$apply及优化使用详解
2018/07/02 Javascript
layui table 表格上添加日期控件的两种方法
2019/09/28 Javascript
[54:17]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第二场 1月10日
2021/03/11 DOTA
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
python 第三方库的安装及pip的使用详解
2017/05/11 Python
python根据unicode判断语言类型实例代码
2018/01/17 Python
Python3处理HTTP请求的实例
2018/05/10 Python
Django文件存储 默认存储系统解析
2019/08/02 Python
PyTorch的Optimizer训练工具的实现
2019/08/18 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
2021/02/02 Python
意大利奢侈品购物网站:Giglio
2018/01/05 全球购物
Chantelle仙黛尔内衣美国官网:法国第一品牌内衣
2018/07/26 全球购物
加拿大时装零售商:Influence U
2018/12/22 全球购物
优秀党员主要事迹
2014/01/19 职场文书
计生专干事迹
2014/05/28 职场文书
动画设计系毕业生求职信
2014/07/15 职场文书
教师四风对照检查材料思想汇报
2014/09/17 职场文书
三严三实对照检查材料
2014/09/22 职场文书
2014年超市工作总结
2014/11/19 职场文书
烈士陵园扫墓感想
2015/08/07 职场文书
深入解析MySQL索引数据结构
2021/10/16 MySQL