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语法速查表
Jan 02 PHP
PHP简单系统数据添加以及数据删除模块源文件下载
Jun 07 PHP
Sorting Array Values in PHP(数组排序)
Sep 15 PHP
thinkphp学习笔记之多表查询
Jul 28 PHP
支持png透明图片的php生成缩略图类分享
Feb 08 PHP
php版微信公众账号第三方管理工具开发简明教程
Sep 23 PHP
php 无限分类 树形数据格式化代码
Oct 11 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
Oct 18 PHP
phpcms配置列表页以及获得文章发布时间
Jul 04 PHP
php测试kafka项目示例
Feb 06 PHP
PHP设计模式(一)工厂模式Factory实例详解【创建型】
May 02 PHP
tp5使用layui实现多个图片上传(带附件选择)的方法实例
Nov 17 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中websocket的使用方法
2016/09/15 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
2017/03/25 PHP
CL vs ForZe BO5 第四场 2.13
2021/03/10 DOTA
JavaScript和JQuery实用代码片段(一)
2010/04/07 Javascript
ExtJS下书写动态生成的xml(兼容火狐)
2013/04/02 Javascript
jQuery学习笔记(4)--Jquery中获取table中某列值的具体思路
2013/04/10 Javascript
js、css、img等浏览器缓存问题的2种解决方案
2013/10/23 Javascript
利用js(jquery)操作Cookie的方法说明
2013/12/19 Javascript
jQuery中outerWidth()方法用法实例
2015/01/19 Javascript
无缝滚动的简单实现代码(推荐)
2016/06/07 Javascript
基于Vue如何封装分页组件
2016/12/16 Javascript
JavaScript仿支付宝6位数字密码输入框
2016/12/29 Javascript
Angular.js中定时器循环的3种方法总结
2017/04/27 Javascript
jQuery扩展_动力节点Java学院整理
2017/07/05 jQuery
JS原生带小白点轮播图实例讲解
2017/07/22 Javascript
WebPack配置vue多页面的技巧
2018/05/15 Javascript
关于单文件组件.vue的使用
2018/09/20 Javascript
微信小程序文章详情页跳转案例详解
2019/07/09 Javascript
[42:56]VGJ.S vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[01:10:49]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
让python在hadoop上跑起来
2016/01/27 Python
Python操作mongodb数据库进行模糊查询操作示例
2018/06/09 Python
Django中reverse反转并且传递参数的方法
2019/08/06 Python
Python爬虫爬取百度搜索内容代码实例
2020/06/05 Python
python爬虫判断招聘信息是否存在的实例代码
2020/11/20 Python
css3 中实现炫酷的loading效果
2019/04/26 HTML / CSS
美国最大的旗帜经销商:Carrot-Top
2018/02/26 全球购物
应届毕业生就业自荐信
2013/10/26 职场文书
平民服装店创业计划书
2014/01/17 职场文书
委托书的格式
2014/08/01 职场文书
争先创优公开承诺书
2014/08/30 职场文书
领导班子群众路线与四风问题对照检查材料思想汇报
2014/10/11 职场文书
小学母亲节活动总结
2015/02/10 职场文书
2016年九九重阳节活动总结
2016/04/01 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
2022/04/09 MySQL