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执行速度全攻略
Oct 09 PHP
linux下 C语言对 php 扩展
Dec 14 PHP
php入门之连接mysql数据库的一个类
Apr 21 PHP
解析yii数据库的增删查改
Jun 20 PHP
单台服务器的PHP进程之间实现共享内存的方法
Jun 13 PHP
thinkphp浏览历史功能实现方法
Oct 29 PHP
smarty缓存用法分析
Dec 16 PHP
php实现mysql数据库连接操作及用户管理
Nov 08 PHP
php使用glob函数遍历文件和目录详解
Sep 23 PHP
PHP+Mysql无刷新问答评论系统(源码)
Dec 20 PHP
在Laravel5.6中使用Swoole的协程数据库查询
Jun 15 PHP
PHP sdk实现在线打包代码示例
Dec 09 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里得到前天和昨天的日期的代码
2007/08/16 PHP
实用PHP会员权限控制实现原理分析
2011/05/29 PHP
ubuntu10.04配置 nginx+php-fpm模式的详解
2013/06/03 PHP
解析thinkphp的左右值无限分类
2013/06/20 PHP
Thinkphp中的curd应用实用要点
2015/01/04 PHP
PHP中echo与print区别点整理
2021/03/09 PHP
javascript读取RSS数据
2007/01/20 Javascript
这些年、我收集的JQuery代码小结
2012/08/01 Javascript
javascript创建数组之联合数组的使用方法示例
2013/12/26 Javascript
JS高级调试技巧:捕获和分析 JavaScript Error详解
2014/03/16 Javascript
JavaScript的jQuery库中ready方法的学习教程
2015/08/14 Javascript
第十章之巨幕页头缩略图与警告框组件
2016/04/25 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
2016/06/13 Javascript
vue.js 表格分页ajax 异步加载数据
2016/10/18 Javascript
JavaScript中Promise的使用详解
2017/02/26 Javascript
vue一步步实现alert功能
2017/07/05 Javascript
微信小程序滚动Tab实现左右可滑动切换
2017/08/17 Javascript
node前端开发模板引擎Jade的入门
2018/05/11 Javascript
jQuery利用FormData上传文件实现批量上传
2018/12/04 jQuery
js全屏事件fullscreenchange 实现全屏、退出全屏操作
2019/09/17 Javascript
node.JS事件机制与events事件模块的使用方法详解
2020/02/06 Javascript
python实现用户管理系统
2018/01/10 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
2018/02/23 Python
django 开发忘记密码通过邮箱找回功能示例
2018/04/17 Python
django项目登录中使用图片验证码的实现方法
2019/08/15 Python
Mac PyCharm中的.gitignore 安装设置教程
2020/04/16 Python
Python3通过chmod修改目录或文件权限的方法示例
2020/06/08 Python
自荐信如何“自荐”
2013/10/24 职场文书
车间组长岗位职责
2013/12/20 职场文书
企业演讲稿范文大全
2014/05/20 职场文书
爱护草坪标语
2014/06/24 职场文书
机械设备与数控技术专业求职信
2014/08/10 职场文书
2014年酒店前台工作总结
2014/11/14 职场文书
商务代表岗位职责
2015/02/15 职场文书
趣味运动会简讯
2015/07/20 职场文书
《黑岩★★射手 DAWN FALL》BD发售宣传CM公开
2022/04/04 日漫