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下载文件的代码示例
Jun 29 PHP
PHP分页效率终结版(推荐)
Jul 01 PHP
PHP验证码函数代码(简单实用)
Sep 29 PHP
php cURL和Rolling cURL并发方式比较
Oct 30 PHP
php文件服务实现虚拟挂载其他目录示例
Apr 17 PHP
php计算当前程序执行时间示例
Apr 24 PHP
thinkphp常见路径用法分析
Dec 02 PHP
将PHP从5.3.28升级到5.3.29时Nginx出现502错误
May 09 PHP
详谈PHP编码转换问题
Jul 28 PHP
phalcon框架使用指南
Feb 23 PHP
Laravel模型间关系设置分表的方法示例
Apr 21 PHP
PHP微信H5支付开发实例
Jul 25 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实现文件安全下载
2006/10/09 PHP
PHP 使用memcached简单示例分享
2015/03/05 PHP
PHP输出两个数字中间有多少个回文数的方法
2015/03/23 PHP
Windows下Apache + PHP SESSION丢失的解决过程全纪录
2015/04/07 PHP
Laravel5权限管理方法详解
2016/07/26 PHP
PHP房贷计算器实例代码,等额本息,等额本金
2017/04/01 PHP
Javascript模块化编程(一)模块的写法最佳实践
2013/01/17 Javascript
jquery1.10给新增元素绑定事件的方法
2014/03/06 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
2014/06/26 Javascript
asp.net中oracle 存储过程(图文)
2015/08/12 Javascript
快速掌握Node.js之Window下配置NodeJs环境
2016/03/21 NodeJs
js实现div模拟模态对话框展现URL内容
2016/05/27 Javascript
基于jQuery实现表格的排序
2016/12/02 Javascript
微信小程序数字滚动插件使用详解
2018/02/02 Javascript
Vue.js 通过jQuery ajax获取数据实现更新后重新渲染页面的方法
2018/08/09 jQuery
JS实现方形抽奖效果
2018/08/27 Javascript
iphone刘海屏页面适配方法
2019/05/07 Javascript
tweenjs缓动算法的使用实例分析
2019/08/26 Javascript
[07:09]2014DOTA2国际邀请赛-Newbee再次发威成功晋级决赛
2014/07/19 DOTA
进一步探究Python中的正则表达式
2015/04/28 Python
Python用模块pytz来转换时区
2016/08/19 Python
python虚拟环境的安装配置图文教程
2017/10/20 Python
python下载文件记录黑名单的实现代码
2017/10/24 Python
深入理解Python爬虫代理池服务
2018/02/28 Python
python主线程与子线程的结束顺序实例解析
2019/12/17 Python
基于pandas中expand的作用详解
2019/12/17 Python
python爬虫多次请求超时的几种重试方法(6种)
2020/12/01 Python
孕妇装中的著名品牌:Isabella Oliver(伊莎贝拉·奥利弗)
2016/10/31 全球购物
什么是makefile? 如何编写makefile?
2013/01/02 面试题
工程招投标邀请书
2014/01/26 职场文书
建筑总经理岗位职责
2014/02/02 职场文书
就业推荐表自我鉴定范文
2014/03/21 职场文书
篮球赛新闻稿
2015/07/17 职场文书
开学典礼校长致辞
2015/07/29 职场文书
background-position百分比原理详解
2021/05/08 HTML / CSS
JS前端宏任务微任务及Event Loop使用详解
2022/07/23 Javascript