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与MySQL开发中页面出现乱码的一种解决方法
Jul 29 PHP
PHP简洁函数小结
Aug 12 PHP
解析php二分法查找数组是否包含某一元素
May 23 PHP
基于MySQL到MongoDB简易对照表的详解
Jun 03 PHP
PHP+memcache实现消息队列案例分享
May 21 PHP
php.ini save_handler 修改不生效的解决办法
Jul 22 PHP
php调用新浪短链接API的方法
Nov 08 PHP
PHP数据库表操作的封装类及用法实例详解
Jul 12 PHP
php mysql PDO 查询操作的实例详解
Sep 23 PHP
PHP手机短信验证码实现流程详解
May 17 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
Apr 23 PHP
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
May 06 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
通过JAVASCRIPT读取ASP设定的COOKIE
2007/02/15 Javascript
广告代码静态化js通用函数
2007/05/09 Javascript
js下将字符串当函数执行的方法
2011/07/13 Javascript
基于JavaScript实现动态添加删除表格的行
2016/02/01 Javascript
JS基于面向对象实现的拖拽功能示例
2016/12/20 Javascript
socket.io实现在线群聊功能
2017/04/07 Javascript
nodejs和C语言插入mysql数据库乱码问题的解决方法
2017/04/14 NodeJs
js实现随机数字字母验证码
2017/06/19 Javascript
Vue.js学习笔记之常用模板语法详解
2017/07/25 Javascript
jQuery实现的form转json经典示例
2017/10/10 jQuery
node.js中TCP Socket多进程间的消息推送示例详解
2018/07/10 Javascript
nodejs高大上的部署方式(PM2)
2018/09/11 NodeJs
使用vue.js在页面内组件监听scroll事件的方法
2018/09/11 Javascript
详解处理Vue单页面应用SEO的另一种思路
2018/11/09 Javascript
Vue-cli3.x + axios 跨域方案踩坑指北
2019/07/04 Javascript
layui上传图片到服务器的非项目目录下的方法
2019/09/26 Javascript
javaScript代码飘红报错看不懂?读完这篇文章再试试
2020/08/19 Javascript
使用Mock.js生成前端测试数据
2020/12/13 Javascript
解决pycharm安装后代码区不能编辑的问题
2018/10/28 Python
详解Python3除法之真除法、截断除法和下取整对比
2019/05/23 Python
Python简单处理坐标排序问题示例
2019/07/11 Python
解决pyshp UnicodeDecodeError的问题
2019/12/06 Python
Django haystack实现全文搜索代码示例
2020/11/28 Python
python函数超时自动退出的实操方法
2020/12/28 Python
python中HTMLParser模块知识点总结
2021/01/25 Python
pycharm进入时每次都是insert模式的解决方式
2021/02/05 Python
Sephora丝芙兰澳洲官方网站:国际知名化妆品购物
2016/10/27 全球购物
惠而浦美国官网:Whirlpool.com
2021/01/19 全球购物
中学教师自我鉴定
2014/02/07 职场文书
矿泉水广告词
2014/03/20 职场文书
乡镇机关党员民主评议表自我评价
2014/09/21 职场文书
银行员工考核评语
2014/12/31 职场文书
2016年区委书记抓基层党建工作公开承诺书
2016/03/25 职场文书
2019思想汇报范文
2019/05/21 职场文书
Python OpenCV超详细讲解读取图像视频和网络摄像头
2022/04/02 Python
MySQL磁盘碎片整理实例演示
2022/04/03 MySQL