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函数file_get_contents超时处理的方法详解
Jun 03 PHP
php实现无限级分类
Dec 24 PHP
10条php编程小技巧
Jul 07 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
Oct 09 PHP
PHPExcel笔记, mpdf导出
May 03 PHP
在Laravel框架里实现发送邮件实例(邮箱验证)
May 20 PHP
php文件类型MIME对照表(比较全)
Oct 07 PHP
php中遍历二维数组并以表格的形式输出的方法
Jan 03 PHP
yii2中LinkPager增加总页数和总记录数的实例
Aug 28 PHP
基于ThinkPHP5.0实现图片上传插件
Sep 25 PHP
PHP ADODB实现事务处理功能示例
May 25 PHP
php解决安全问题的方法实例
Sep 19 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数组相加操作及与array_merge的区别浅析
2016/11/26 PHP
Yii2中简单的场景使用介绍
2017/06/02 PHP
laravel自定义分页效果
2017/07/23 PHP
div模拟滚动条效果示例代码
2013/10/16 Javascript
node.js中的buffer.toJSON方法使用说明
2014/12/14 Javascript
javascript递归回溯法解八皇后问题
2015/04/22 Javascript
jQuery插件zepto.js简单实现tab切换
2015/06/16 Javascript
BootStrap 超链接变按钮的实现方法
2016/09/25 Javascript
jquery中用jsonp实现搜索框功能
2016/10/18 Javascript
jQuery与JavaScript节点创建方法的对比
2016/11/18 Javascript
jQuery实现遍历复选框的方法示例
2017/03/06 Javascript
常用的js方法合集
2017/03/10 Javascript
解决vue里碰到 $refs 的问题的方法
2017/07/13 Javascript
Vue.js实现网格列表布局转换方法
2017/08/25 Javascript
angularJs利用$scope处理升降序的方法
2018/10/08 Javascript
使用vue 国际化i18n 实现多实现语言切换功能
2018/10/11 Javascript
深入理解基于vue-cli的webpack打包优化实践及探索
2019/10/14 Javascript
Node.js Domain 模块实例详解
2020/03/18 Javascript
基于vue--key值的特殊用处详解
2020/07/31 Javascript
Vue插槽_特殊特性slot,slot-scope与指令v-slot说明
2020/09/04 Javascript
python 时间戳与格式化时间的转化实现代码
2016/03/23 Python
python多进程实现文件下载传输功能
2018/07/28 Python
PyCharm代码提示忽略大小写设置方法
2018/10/28 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
2019/01/22 Python
pandas把所有大于0的数设置为1的方法
2019/01/26 Python
nginx+uwsgi+django环境搭建的方法步骤
2019/11/25 Python
python如何调用字典的key
2020/05/25 Python
python openCV自制绘画板
2020/10/27 Python
python在地图上画比例的实例详解
2020/11/13 Python
python 实现简易的记事本
2020/11/30 Python
Android本地应用打开方法——通过html5写连接
2016/03/11 HTML / CSS
迟到早退检讨书
2014/02/10 职场文书
在校实习生求职信
2014/06/18 职场文书
市场营销专业应届生自荐信
2014/06/19 职场文书
教师党员学习十八届四中全会思想汇报
2014/11/03 职场文书
2015年机关作风和效能建设工作总结
2015/07/23 职场文书