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 相关文章推荐
第1次亲密接触PHP5(2)
Oct 09 PHP
PHP数组操作汇总 php数组的使用技巧
Jul 17 PHP
php字符串分割函数用法实例
Mar 17 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
Jul 15 PHP
ThinkPHP路由详解
Jul 27 PHP
PHP中的session安全吗?
Jan 22 PHP
深入剖析浏览器退出之后php还会继续执行么
May 17 PHP
PHP实现加密文本文件并限制特定页面的存取的效果
Oct 21 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
Jun 19 PHP
PHP实现随机发放扑克牌
Apr 21 PHP
PHP利用curl发送HTTP请求的实例代码
Jul 09 PHP
PHP终止脚本运行三种实现方法详解
Sep 01 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中异常处理方法小结
2015/01/09 PHP
验证token、回复图文\文本、推送消息的实用微信类php代码
2016/06/28 PHP
PHP实现微信图片上传到服务器的方法示例
2017/06/29 PHP
PHP与Web页面交互操作实例分析
2020/06/02 PHP
不错的一个日期输入 动态
2006/11/06 Javascript
jquery中的常用事件bind、hover、toggle等示例介绍
2014/07/21 Javascript
使用Raygun对Node.js应用进行错误处理的方法
2015/06/23 Javascript
JS实现跟随鼠标的链接文字提示框效果
2015/08/06 Javascript
JS常用知识点整理
2017/01/21 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
2017/02/16 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
2017/03/09 Javascript
JavaScript实现短信倒计时60s
2017/10/09 Javascript
jQuery封装animate.css的实例
2018/01/04 jQuery
JavaScript 判断iPhone X Series机型的方法
2019/01/28 Javascript
微信实现自动跳转到用其他浏览器打开指定APP下载
2019/02/15 Javascript
基于layui table返回的值的多级嵌套的解决方法
2019/09/19 Javascript
vue实现鼠标移过出现下拉二级菜单功能
2019/12/12 Javascript
python实现从web抓取文档的方法
2014/09/26 Python
python求解水仙花数的方法
2015/05/11 Python
python套接字流重定向实例汇总
2016/03/03 Python
python僵尸进程产生的原因
2017/07/21 Python
python机器学习之神经网络(一)
2017/12/20 Python
Python操作word常见方法示例【win32com与docx模块】
2018/07/17 Python
python实现机器学习之元线性回归
2018/09/06 Python
利用Python如何实现一个小说网站雏形
2018/11/23 Python
python 如何设置守护进程
2020/10/29 Python
Python根据字符串调用函数过程解析
2020/11/05 Python
乐天旅游台湾网站:Rakuten Travel TW
2017/06/01 全球购物
印尼披萨外送专家:Domino’s Pizza印尼
2017/12/28 全球购物
.NET里面什么时候需要调用垃圾回收
2015/06/01 面试题
招商经理岗位职责
2013/11/16 职场文书
新入职员工的自我介绍演讲稿
2014/01/02 职场文书
家长评语大全
2014/01/22 职场文书
中学生爱国演讲稿
2014/09/05 职场文书
抗洪救灾标语
2014/10/08 职场文书
房地产财务经理岗位职责
2015/04/08 职场文书