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 相关文章推荐
第十三节 对象串行化 [13]
Oct 09 PHP
用PHP动态创建Flash动画
Oct 09 PHP
Php获取金书网的书名的实现代码
Jun 11 PHP
PHP 图片文件上传实现代码
Dec 29 PHP
php长字符串定义方法
Jul 12 PHP
php中拷贝构造函数、赋值运算符重载
Jul 25 PHP
PHP 正则判断中文UTF-8或GBK的思路及具体实现
Nov 26 PHP
浅谈php函数serialize()与unserialize()的使用方法
Aug 19 PHP
php超快高效率统计大文件行数
Jul 05 PHP
php获取当前月与上个月月初及月末时间戳的方法
Dec 05 PHP
详解Yaf框架PHPUnit集成测试方法
Dec 27 PHP
浅谈PHP匿名函数和闭包
Mar 08 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中常用编辑器推荐
2007/01/02 PHP
php var_export与var_dump 输出的不同
2013/08/09 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
2014/10/13 PHP
PHP中使用hidef扩展代替define提高性能
2015/04/09 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
2019/11/13 PHP
jquery ready(fn)事件使用介绍
2013/08/21 Javascript
jquery.validate提示错误信息位置方法
2016/01/22 Javascript
只需五句话搞定JavaScript作用域(经典)
2016/07/26 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
2016/10/10 Javascript
jQuery特殊符号转义的实现
2016/11/30 Javascript
Node.js中用D3.js的方法示例
2017/01/16 Javascript
Angular中实现树形结构视图实例代码
2017/05/05 Javascript
Vue Spa切换页面时更改标题的实例代码
2017/07/15 Javascript
使用express+multer实现node中的图片上传功能
2018/02/02 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
2019/09/16 Javascript
vue 父组件通过$refs获取子组件的值和方法详解
2019/11/07 Javascript
微信小程序多列表渲染数据开关互不影响的实现
2020/06/05 Javascript
[02:20]DOTA2英雄基础教程 黑暗贤者
2013/12/19 DOTA
[01:18:43]2014 DOTA2华西杯精英邀请赛5 24 iG VS DK
2014/05/25 DOTA
Python 私有函数的实例详解
2017/09/11 Python
windows下添加Python环境变量的方法汇总
2018/05/14 Python
Python图像处理之颜色的定义与使用分析
2019/01/03 Python
python中下标和切片的使用方法解析
2019/08/27 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
2019/09/24 Python
python 实现超级玛丽游戏
2020/11/25 Python
Gucci法国官方网站:意大利奢侈品牌
2018/07/25 全球购物
软件测试英文面试题
2012/10/14 面试题
英语系本科生个人求职信
2013/09/21 职场文书
函授大专自我鉴定
2013/11/01 职场文书
2014年销售内勤工作总结
2014/12/01 职场文书
汽车4S店前台接待岗位职责
2015/04/03 职场文书
小学教师读书笔记
2015/07/01 职场文书
民间借贷纠纷起诉书
2015/08/03 职场文书
深度学习小工程练习之垃圾分类详解
2021/04/14 Python
Python加密技术之RSA加密解密的实现
2022/04/08 Python