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 相关文章推荐
一个颜色轮换的简单例子
Oct 09 PHP
php 友好URL的实现(吐血推荐)
Oct 04 PHP
Cakephp 执行主要流程
Mar 24 PHP
php表单转换textarea换行符的方法
Sep 10 PHP
PHP发明人谈MVC和网站设计架构 貌似他不支持php用mvc
Jun 04 PHP
PHP APC的安装与使用详解
Jun 13 PHP
PHP计算百度地图两个GPS坐标之间距离的方法
Jan 09 PHP
Yii快速入门经典教程
Dec 28 PHP
详解PHP的Yii框架中自带的前端资源包的使用
Mar 31 PHP
一键生成各种尺寸Icon的php脚本(实例)
Feb 08 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
May 30 PHP
基于Laravel 5.2 regex验证的正确写法
Sep 29 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
40年前的这部特摄片恐龙特级克塞号80后的共同回忆
2020/03/08 日漫
PHP防止跨域提交表单
2013/11/01 PHP
ThinkPHP框架实现session跨域问题的解决方法
2014/07/01 PHP
Thinkphp批量更新数据的方法汇总
2016/06/29 PHP
php策略模式简单示例分析【区别于工厂模式】
2019/09/25 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
客户端静态页面玩分页
2006/06/26 Javascript
JavaScript中的this实例分析
2011/04/28 Javascript
EasyUI实现二级页面的内容勾选的方法
2015/03/01 Javascript
javascript处理a标签超链接默认事件的方法
2015/06/29 Javascript
SelecT下拉框选中和取值的解决方法
2016/11/22 Javascript
BootStrap表单宽度设置方法
2017/03/10 Javascript
Vue filters过滤器的使用方法
2017/07/14 Javascript
Popup弹出框添加数据实现方法
2017/10/27 Javascript
JavaScript继承与聚合实例详解
2019/01/22 Javascript
原来JS还可以这样拆箱转换详解
2019/02/01 Javascript
[17:36]VG战队纪录片
2014/08/21 DOTA
python numpy 一维数组转变为多维数组的实例
2018/07/02 Python
Python 基于FIR实现Hilbert滤波器求信号包络详解
2020/02/26 Python
python轮询机制控制led实例
2020/05/03 Python
keras实现多种分类网络的方式
2020/06/11 Python
提高python代码运行效率的一些建议
2020/09/29 Python
FORZIERI澳大利亚站:全球顶级奢华配饰精品店
2016/12/31 全球购物
英国最专业的健身器材供应商之一:Best Gym Equipment
2017/12/22 全球购物
运动会通讯稿50字
2014/01/30 职场文书
《骆驼和羊》教学反思
2014/02/27 职场文书
元宵节主持词
2014/03/25 职场文书
三八妇女节演讲稿
2014/05/27 职场文书
正科级干部考察材料
2014/05/29 职场文书
英语分层教学实施方案
2014/06/15 职场文书
入党积极分子十八届四中全会思想汇报
2014/10/23 职场文书
求职自我评价范文
2015/03/09 职场文书
2015年艾滋病防治工作总结
2015/05/22 职场文书
公证书
2019/04/17 职场文书
一篇文章带你复习java知识点
2021/06/28 Java/Android
Valheim服务器 Mod修改安装教程 【ValheimPlus】
2022/12/24 Servers