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 相关文章推荐
开源SNS系统-ThinkSNS
May 18 PHP
使用zend studio for eclipse不能激活代码提示功能的解决办法
Oct 11 PHP
计算一段日期内的周末天数的php代码(星期六,星期日总和)
Nov 12 PHP
PHP 数组和字符串互相转换实现方法
Mar 26 PHP
深入理解:XML与对象的序列化与反序列化
Jun 08 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
Mar 28 PHP
php生成RSS订阅的方法
Feb 13 PHP
php身份证号码检查类实例
Jun 18 PHP
php获取开始与结束日期之间所有日期的方法
Nov 29 PHP
PHP中ajax无刷新上传图片与图片下载功能
Feb 21 PHP
PHP控制反转(IOC)和依赖注入(DI)
Mar 13 PHP
php微信公众号开发之图片回复
Oct 20 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的字符串用法小结
2010/06/08 PHP
php unset全局变量运用问题的深入解析
2013/06/17 PHP
解析php file_exists无效的解决办法
2013/06/26 PHP
PHP设计模式之装饰器模式定义与用法详解
2018/04/02 PHP
谷歌浏览器 insertCell与appendChild的区别
2009/02/12 Javascript
qTip 基于JQuery的Tooltip插件[兼容性好]
2010/09/01 Javascript
js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍
2013/01/24 Javascript
jQuery获取CSS样式中的颜色值的问题,不同浏览器格式不同的解决办法
2013/05/13 Javascript
node爬取微博的数据的简单封装库nodeweibo使用指南
2015/01/02 Javascript
jquery实现图片水平滚动效果代码分享
2015/08/26 Javascript
Jquery常用的方法汇总
2015/09/01 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
2015/09/04 Javascript
bootstrap响应式表格实例详解
2017/05/15 Javascript
微信小程序上传图片功能(附后端代码)
2020/06/19 Javascript
vue elementUI tree树形控件获取父节点ID的实例
2018/09/12 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
2019/06/18 Javascript
layer关闭弹出窗口触发表单提交问题的处理方法
2019/09/25 Javascript
python实现的防DDoS脚本
2011/02/08 Python
使用Python多线程爬虫爬取电影天堂资源
2016/09/23 Python
python 线程的暂停, 恢复, 退出详解及实例
2016/12/06 Python
linux下python中文乱码解决方案详解
2019/08/28 Python
浅谈Django+Gunicorn+Nginx部署之路
2019/09/11 Python
将python包发布到PyPI和制作whl文件方式
2019/12/25 Python
Python如何基于smtplib发不同格式的邮件
2019/12/30 Python
Python单元测试及unittest框架用法实例解析
2020/07/09 Python
伦敦最著名的老字号百货公司:Selfridges(塞尔福里奇百货)
2016/07/25 全球购物
日本面向世界,国际级的免税在线购物商城:DOKODEMO
2017/02/01 全球购物
苹果音乐订阅:Apple Music
2018/08/02 全球购物
Sunglasses Shop英国:欧洲领先的太阳镜在线供应商之一
2018/09/19 全球购物
Hanky Panky官方网站:内衣和睡衣
2019/07/25 全球购物
报关简历自我评价怎么写
2013/09/19 职场文书
某某同志考察材料
2014/05/28 职场文书
感情真挚的毕业生求职信
2014/07/19 职场文书
让子弹飞观后感
2015/06/11 职场文书
餐馆开业致辞
2015/08/01 职场文书
python爬不同图片分别保存在不同文件夹中的实现
2021/04/02 Python