php实现的生成排列算法示例


Posted in PHP onJuly 25, 2019

本文实例讲述了php实现的生成排列算法。分享给大家供大家参考,具体如下:

<?php
function perm($s, $n, $index)
{
  if($n == 0)
  {
     return '';
  }
  else
  {
    $nIndex = count($index);  //可用的字符串下标
    $res = array();
    foreach($index as $i => $v)
    {
      $tmp = $index;
      unset($tmp[$i]);    //去掉当前的前缀
      /* 调试信息,便于理解
      echo "len $n , cur $i , index:\n";
      var_dump($tmp);
       */
      $ret = perm($s, $n-1, $tmp);  //递归得到稍短的排列
      if($ret != '')
      {
        foreach($ret as $r)
        {
          $res[] = $s[$v] . $r;  //将稍短的排列逐个拼上当前的前缀
        }
      }
      else
      {
        $res[] = $s[$v];
      }
    }
    return $res;
  }
}
function getPerm($s)
{
  $n = strlen($s);
  $index = range(0, $n-1);
  //得到不同长度的排列
  for($i=1; $i<=$n; $i++)
  {
    var_dump(perm($s, $i, $index));
  }
}
getPerm('abcd');
?>

运行结果:

array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
  [3]=>
  string(1) "d"
}
array(12) {
  [0]=>
  string(2) "ab"
  [1]=>
  string(2) "ac"
  [2]=>
  string(2) "ad"
  [3]=>
  string(2) "ba"
  [4]=>
  string(2) "bc"
  [5]=>
  string(2) "bd"
  [6]=>
  string(2) "ca"
  [7]=>
  string(2) "cb"
  [8]=>
  string(2) "cd"
  [9]=>
  string(2) "da"
  [10]=>
  string(2) "db"
  [11]=>
  string(2) "dc"
}
array(24) {
  [0]=>
  string(3) "abc"
  [1]=>
  string(3) "abd"
  [2]=>
  string(3) "acb"
  [3]=>
  string(3) "acd"
  [4]=>
  string(3) "adb"
  [5]=>
  string(3) "adc"
  [6]=>
  string(3) "bac"
  [7]=>
  string(3) "bad"
  [8]=>
  string(3) "bca"
  [9]=>
  string(3) "bcd"
  [10]=>
  string(3) "bda"
  [11]=>
  string(3) "bdc"
  [12]=>
  string(3) "cab"
  [13]=>
  string(3) "cad"
  [14]=>
  string(3) "cba"
  [15]=>
  string(3) "cbd"
  [16]=>
  string(3) "cda"
  [17]=>
  string(3) "cdb"
  [18]=>
  string(3) "dab"
  [19]=>
  string(3) "dac"
  [20]=>
  string(3) "dba"
  [21]=>
  string(3) "dbc"
  [22]=>
  string(3) "dca"
  [23]=>
  string(3) "dcb"
}
array(24) {
  [0]=>
  string(4) "abcd"
  [1]=>
  string(4) "abdc"
  [2]=>
  string(4) "acbd"
  [3]=>
  string(4) "acdb"
  [4]=>
  string(4) "adbc"
  [5]=>
  string(4) "adcb"
  [6]=>
  string(4) "bacd"
  [7]=>
  string(4) "badc"
  [8]=>
  string(4) "bcad"
  [9]=>
  string(4) "bcda"
  [10]=>
  string(4) "bdac"
  [11]=>
  string(4) "bdca"
  [12]=>
  string(4) "cabd"
  [13]=>
  string(4) "cadb"
  [14]=>
  string(4) "cbad"
  [15]=>
  string(4) "cbda"
  [16]=>
  string(4) "cdab"
  [17]=>
  string(4) "cdba"
  [18]=>
  string(4) "dabc"
  [19]=>
  string(4) "dacb"
  [20]=>
  string(4) "dbac"
  [21]=>
  string(4) "dbca"
  [22]=>
  string(4) "dcab"
  [23]=>
  string(4) "dcba"
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
按上下级层次关系输出内容的PHP代码
Jul 17 PHP
php实现mysql数据库操作类分享
Feb 14 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
Dec 16 PHP
PHP中使用php5-ffmpeg撷取视频图片实例
Jan 07 PHP
十幅图告诉你什么是PHP引用
Feb 22 PHP
又十个超级有用的PHP代码片段
Sep 24 PHP
PHP实现对xml的增删改查操作案例分析
May 19 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
Aug 17 PHP
PHP实现数组和对象的相互转换操作示例
Mar 20 PHP
php命名空间设计思想、用法与缺点分析
Jul 17 PHP
Thinkphp5.0 框架Model模型简单用法分析
Oct 11 PHP
tp5递归 无限级分类详解
Oct 18 PHP
Yii框架中使用PHPExcel的方法分析
Jul 25 #PHP
PHP保留两位小数的几种方法
Jul 24 #PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
Jul 24 #PHP
Yii Framework框架使用PHPExcel组件的方法示例
Jul 24 #PHP
PHP+Apache实现二级域名之间共享cookie的方法
Jul 24 #PHP
PHP容器类的两种实现方式示例
Jul 24 #PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
Jul 24 #PHP
You might like
PHP会话控制:Session与Cookie详解
2014/09/27 PHP
php清除和销毁session的方法分析
2015/03/19 PHP
PHP编程中尝试程序并发的几种方式总结
2016/03/21 PHP
Laravel源码解析之路由的使用和示例详解
2018/09/27 PHP
PHP lcfirst()函数定义与用法
2019/03/08 PHP
Javascript类定义语法,私有成员、受保护成员、静态成员等介绍
2011/12/08 Javascript
jQuery动态添加删除select项(实现代码)
2013/09/03 Javascript
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
jQuery移除元素自动解绑事件实现思路及代码
2014/05/31 Javascript
利用HTML5的画布Canvas实现刮刮卡效果
2015/09/06 Javascript
jQuery实现页面滚动时智能浮动定位
2017/01/08 Javascript
基于Bootstrap的Java开发问题汇总(Spring MVC)
2017/01/15 Javascript
jQuery图片切换动画效果
2017/02/28 Javascript
jQuery插件echarts实现的单折线图效果示例【附demo源码下载】
2017/03/04 Javascript
基于ajax和jsonp的原生封装(实例)
2017/10/16 Javascript
基于JavaScript 性能优化技巧心得(分享)
2017/12/11 Javascript
Vue头像处理方案小结
2018/07/26 Javascript
如何使用 vue + d3 画一棵树
2018/12/03 Javascript
深入理解Vue.js轻量高效的前端组件化方案
2018/12/10 Javascript
CKeditor富文本编辑器使用技巧之添加自定义插件的方法
2019/06/14 Javascript
Vue中常用rules校验规则(实例代码)
2019/11/14 Javascript
Python获取指定文件夹下的文件名的方法
2018/02/06 Python
用Python实现数据的透视表的方法
2018/11/16 Python
Python发送邮件功能示例【使用QQ邮箱】
2018/12/04 Python
使用k8s部署Django项目的方法步骤
2019/01/14 Python
python ---lambda匿名函数介绍
2019/03/13 Python
Python实现数据结构线性链表(单链表)算法示例
2019/05/04 Python
python中Ansible模块的Playbook的具体使用
2020/05/28 Python
python + selenium 刷B站播放量的实例代码
2020/06/12 Python
Python 存取npy格式数据实例
2020/07/01 Python
名词解释型面试题(主要是网络)
2013/12/27 面试题
施工人员岗位职责
2013/12/12 职场文书
建筑项目策划书
2014/01/13 职场文书
户籍证明的格式
2014/01/13 职场文书
医药销售自荐书
2014/05/29 职场文书
公司法人授权委托书范本
2014/09/12 职场文书