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 相关文章推荐
PHP脚本的10个技巧(8)
Oct 09 PHP
php 购物车实例(申精)
May 11 PHP
php 更新数据库中断的解决方法
Jun 05 PHP
Discuz 6.0+ 批量注册用户名
Sep 13 PHP
解析php中memcache的应用
Jun 18 PHP
解析php mysql 事务处理回滚操作(附实例)
Aug 05 PHP
PHP输出英文时间日期的安全方法(RFC 1123格式)
Jun 13 PHP
php实现文件下载代码分享
Aug 19 PHP
phpstorm编辑器乱码问题解决
Dec 01 PHP
PHP微信刮刮卡 附微信接口
Jul 22 PHP
PHP数组常用函数实例小结
Aug 20 PHP
PHP操作XML中XPath的应用示例
Jul 04 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
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
2007/04/18 PHP
php读取mysql乱码,用set names XXX解决的原理分享
2011/12/29 PHP
初品cakephp 入门基础
2012/02/16 PHP
探讨各种PHP字符串函数的总结分析
2013/06/05 PHP
php查找字符串中第一个非0的位置截取
2017/02/27 PHP
PHP常见数组排序方法小结
2018/08/20 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
2020/10/28 PHP
js no-repeat写法 背景不重复
2009/03/18 Javascript
基于jquery的tab切换 js原理
2010/04/01 Javascript
javascript 跨浏览器开发经验总结(五) js 事件
2010/05/19 Javascript
一个简单的js动画效果代码
2010/07/20 Javascript
js动态创建表格,删除行列的小例子
2013/07/20 Javascript
超简单JS二级、多级联动的简单实例
2014/02/18 Javascript
JavaScript获取css行间样式,内连样式和外链样式的简单方法
2016/07/18 Javascript
浅谈angular4生命周期钩子
2017/09/05 Javascript
VUE element-ui 写个复用Table组件的示例代码
2017/11/18 Javascript
JS中call和apply函数用法实例分析
2018/06/20 Javascript
JavaScript碰撞检测原理及其实现代码
2020/03/12 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
2020/11/16 Javascript
Python爬虫DOTA排行榜爬取实例(分享)
2017/06/13 Python
Python迭代器和生成器定义与用法示例
2018/02/10 Python
pandas 数据索引与选取的实现方法
2019/06/21 Python
Python中利用LSTM模型进行时间序列预测分析的实现
2019/07/26 Python
Python socket服务常用操作代码实例
2020/06/22 Python
Python confluent kafka客户端配置kerberos认证流程详解
2020/10/12 Python
Reebonz中国官网:新加坡奢侈品购物网站
2017/03/17 全球购物
销售主管的自我评价分享
2014/01/03 职场文书
致100米运动员广播稿
2014/02/14 职场文书
继承公证书
2014/04/09 职场文书
我的理想演讲稿
2014/04/30 职场文书
大学毕业生求职自荐书
2014/06/05 职场文书
学生党员一帮一活动总结
2014/07/08 职场文书
民警群众路线教育实践活动对照检查材料
2014/10/04 职场文书
入队仪式主持词
2015/07/04 职场文书
python tkinter Entry控件的焦点移动操作
2021/05/22 Python
使用CSS设置滚动条样式
2022/01/18 HTML / CSS