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 相关文章推荐
4.与数据库的连接
Oct 09 PHP
PHP 文件上传进度条的两种实现方法的代码
Nov 25 PHP
PHP5权威编程阅读学习笔记 附电子书下载
Jul 05 PHP
深入Nginx + PHP 缓存详解
Jul 11 PHP
php需登录的文件上传管理系统
Mar 21 PHP
php打包压缩文件之ZipArchive方法用法分析
Apr 30 PHP
mysql alter table命令修改表结构实例详解
Sep 24 PHP
PHP单例模式与工厂模式详解
Aug 29 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
May 12 PHP
PHP实现会员账号单唯一登录的方法分析
Mar 07 PHP
YII框架实现自定义第三方扩展操作示例
Apr 26 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数组(array)输出的三种形式详解
2013/06/05 PHP
PHP无限分类(树形类)
2013/09/28 PHP
Yii获取当前url和域名的方法
2015/06/08 PHP
分享3个php获取日历的函数
2015/09/25 PHP
php连接oracle数据库的核心步骤
2016/05/26 PHP
php5.3后静态绑定用法详解
2016/11/11 PHP
JS模拟的QQ面板上的多级可展开的菜单
2009/10/10 Javascript
jQuery的Ajax时无响应数据的解决方法
2010/05/25 Javascript
JavaScript Math.floor方法(对数值向下取整)
2015/01/09 Javascript
使用ngView配合AngularJS应用实现动画效果的方法
2015/06/19 Javascript
微信QQ的二维码登录原理js代码解析
2016/06/23 Javascript
JavaScript如何实现跨域请求
2016/08/05 Javascript
jQuery过滤选择器经典应用
2016/08/18 Javascript
炫酷的js手风琴效果
2016/10/13 Javascript
nodejs模块学习之connect解析
2017/07/05 NodeJs
Vue Transition实现类原生组件跳转过渡动画的示例
2017/08/19 Javascript
微信小程序使用toast消息对话框提示用户忘记输入用户名或密码功能【附源码下载】
2017/12/09 Javascript
vue-router 实现导航守卫(路由卫士)的实例代码
2018/09/02 Javascript
vue-lazyload使用总结(推荐)
2018/11/01 Javascript
jQuery操作选中select下拉框的值代码实例
2020/02/07 jQuery
vue常用高阶函数及综合实例
2021/02/25 Vue.js
测试、预发布后用python检测网页是否有日常链接
2014/06/03 Python
python制作企业邮箱的爆破脚本
2016/10/05 Python
Python实现的NN神经网络算法完整示例
2018/06/19 Python
Python matplotlib实时画图案例
2020/04/23 Python
python3代码中实现加法重载的实例
2020/12/03 Python
波兰购物网站:MALL.PL
2019/05/01 全球购物
澳大利亚领先的时尚内衣零售商:Bras N Things
2020/07/28 全球购物
最新英语专业学生求职信范文
2013/09/21 职场文书
20岁生日感言
2014/01/13 职场文书
职工趣味运动会方案
2014/02/10 职场文书
职业女性的职业规划
2014/03/04 职场文书
2014年大班保育员工作总结
2014/12/02 职场文书
2014年办公室文秘工作总结
2014/12/09 职场文书
python基于opencv批量生成验证码的示例
2021/04/28 Python
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python