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 05 PHP
PhpMyAdmin中无法导入sql文件的解决办法
Jan 08 PHP
解决phpmyadmin中缺少mysqli扩展问题的方法
May 06 PHP
基于php设计模式中单例模式的应用分析
May 15 PHP
PHP创建桌面快捷方式的实例代码
Feb 17 PHP
php实现文本数据导入SQL SERVER
May 17 PHP
修改PHP脚本使WordPress拦截垃圾评论的方法示例
Dec 10 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
Dec 18 PHP
php+jQuery递归调用POST循环请求示例
Oct 14 PHP
PHP机器学习库php-ml的简单测试和使用方法
Jul 14 PHP
laravel框架的安装与路由实例分析
Oct 11 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
Mar 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管理内存函数 memory_get_usage()使用介绍
2012/09/23 PHP
php+mysqli使用面向对象方式查询数据库实例
2015/01/29 PHP
onpropertypchange
2006/07/01 Javascript
js中如何把字符串转化为对象、数组示例代码
2013/07/17 Javascript
JS+CSS实现美化的下拉列表框效果
2015/08/11 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
javascript实现仿百度图片的瀑布流加载效果
2016/04/20 Javascript
Immutable 在 JavaScript 中的应用
2016/05/02 Javascript
JavaScript检测原始值、引用值、属性
2016/06/20 Javascript
全面了解函数声明与函数表达式、变量提升
2016/08/09 Javascript
Javascript 实现简单计算器实例代码
2016/10/23 Javascript
删除table表格行的实例讲解
2017/09/21 Javascript
vue中使用element组件时事件想要传递其他参数的问题
2019/09/18 Javascript
vue中keep-alive,include的缓存问题
2019/11/26 Javascript
[48:45]Ti4 循环赛第二日 NEWBEE vs EG
2014/07/11 DOTA
使用go和python递归删除.ds store文件的方法
2014/01/22 Python
python使用正则表达式匹配字符串开头并打印示例
2017/01/11 Python
浅析Git版本控制器使用
2017/12/10 Python
使用实现XlsxWriter创建Excel文件并编辑
2018/05/04 Python
Python使用Shelve保存对象方法总结
2019/01/28 Python
Python OS模块实例详解
2019/04/15 Python
Python代理IP爬虫的新手使用教程
2019/09/05 Python
numpy数组做图片拼接的实现(concatenate、vstack、hstack)
2019/11/08 Python
python中数字是否为可变类型
2020/07/08 Python
如何删除一个表里面的重复行
2013/07/13 面试题
水电工岗位职责
2014/02/12 职场文书
初中班主任评语大全
2014/04/24 职场文书
HR求职自荐信范文
2014/06/21 职场文书
不遵守课堂纪律的检讨书
2014/09/24 职场文书
上课玩手机的检讨书
2014/10/01 职场文书
小学生表扬稿范文
2015/05/05 职场文书
幼儿园万圣节活动总结
2015/05/05 职场文书
2016年第29个世界无烟日宣传活动总结
2016/04/06 职场文书
写好Python代码的几条重要技巧
2021/05/21 Python
关于Vue中的options选项
2022/03/22 Vue.js
Nginx安装配置详解
2022/06/25 Servers