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 相关文章推荐
在PHP3中实现SESSION的功能(二)
Oct 09 PHP
关于php连接mssql:pdo odbc sql server
Jul 20 PHP
Eclipse的PHP插件PHPEclipse安装和使用
Jul 20 PHP
从零开始学YII2框架(六)高级应用程序模板
Aug 20 PHP
Smarty中常用变量操作符汇总
Oct 27 PHP
laravel学习教程之存取器
Jul 30 PHP
PHP文字转图片功能原理与实现方法分析
Aug 31 PHP
PHP+Redis 消息队列 实现高并发下注册人数统计的实例
Jan 29 PHP
PHP封装的完整分页类示例
Aug 21 PHP
PHP小程序支付功能完整版【基于thinkPHP】
Mar 26 PHP
php实现JWT验证的实例教程
Nov 26 PHP
PHP实现chrome表单请求数据转换为接口使用的json数据
Mar 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
通过ICQ网关发送手机短信的PHP源程序
2006/10/09 PHP
php判断页面是否是微信打开的示例(微信打开网页)
2014/04/25 PHP
php+ajax实现文章自动保存的方法
2014/12/30 PHP
xmlHTTP实例
2006/10/24 Javascript
JavaScript实现的日期控件具体代码
2013/11/18 Javascript
键盘KeyCode值列表汇总
2013/11/26 Javascript
JavaScript中对象介绍
2014/12/31 Javascript
jQuery实现菜单式图片滑动切换
2015/03/14 Javascript
JS建造者模式基本用法实例分析
2015/06/30 Javascript
JSON+Jquery省市区三级联动
2016/01/13 Javascript
深入理解js数组的sort排序
2016/05/28 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
2016/10/08 Javascript
vue实现选项卡及选项卡切换效果
2018/04/24 Javascript
JS实现图片切换效果
2018/11/17 Javascript
Vue结合后台导入导出Excel问题详解
2019/02/19 Javascript
7个好用的JavaScript技巧分享(译)
2019/05/07 Javascript
IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法
2019/06/04 Javascript
实用Javascript调试技巧分享(小结)
2019/06/18 Javascript
Vue组件通信$attrs、$listeners实现原理解析
2020/09/03 Javascript
采用python实现简单QQ单用户机器人的方法
2014/07/03 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
2019/12/18 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
2020/05/15 Python
公认8个效率最高的爬虫框架
2020/07/28 Python
python 可视化库PyG2Plot的使用
2021/01/21 Python
python gui开发——制作抖音无水印视频下载工具(附源码)
2021/02/07 Python
Spartoo英国:欧洲最大的网上鞋店
2016/09/13 全球购物
银行介绍信范文
2014/01/10 职场文书
培训班开班仪式主持词
2014/03/28 职场文书
民政局副局长民主生活会个人对照检查材料
2014/09/19 职场文书
小学教师师德整改措施
2014/09/29 职场文书
说谎欺骗人检讨书300字
2014/11/18 职场文书
2014年会计个人工作总结
2014/11/24 职场文书
幼儿教师年度个人总结
2015/02/05 职场文书
2015年财务科工作总结范文
2015/05/13 职场文书
未来,这5大方向都很适合创业
2019/07/22 职场文书
Python文件的操作示例的详细讲解
2021/04/08 Python