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 相关文章推荐
ThinkPHP关联模型操作实例分析
Sep 23 PHP
PHP中计算字符串相似度的函数代码
Dec 29 PHP
php小技巧之过滤ascii控制字符
May 14 PHP
一组PHP加密解密函数分享
Jun 05 PHP
PHP人民币金额转大写实例代码
Oct 02 PHP
PHP读书笔记_运算符详解
Jul 01 PHP
PHP+Mysql无刷新问答评论系统(源码)
Dec 20 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
Sep 11 PHP
PHP 代码简洁之道(小结)
Oct 16 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
Oct 17 PHP
php的RSA加密解密算法原理与用法分析
Jan 23 PHP
浅谈如何提高PHP代码的质量
May 28 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
全国FM电台频率大全 - 30 宁夏回族自治区
2020/03/11 无线电
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
YII框架中搜索分页jQuery写法详解
2016/12/19 PHP
自己写了一个展开和收起的多更能型的js效果
2013/03/05 Javascript
JS中数组Array的用法示例介绍
2014/02/20 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
2014/09/02 Javascript
jQuery中ajax的get()方法用法实例
2014/12/26 Javascript
浅谈jQuery事件绑定原理
2015/01/02 Javascript
JS限制文本框只能输入数字和字母方法
2015/02/28 Javascript
jQuery实现按钮只点击一次后就取消点击事件绑定的方法
2015/06/26 Javascript
学习vue.js计算属性
2016/12/03 Javascript
vue父组件向子组件传递多个数据的实例
2018/03/01 Javascript
微信小程序之swiper轮播图中的图片自适应高度的方法
2018/04/23 Javascript
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
Vue实现类似Spring官网图片滑动效果方法
2019/03/01 Javascript
[01:08:48]LGD vs OG 2018国际邀请赛淘汰赛BO3 第三场 8.25
2018/08/29 DOTA
[00:58]PWL开团时刻DAY5——十人开雾0换5
2020/11/04 DOTA
python使用range函数计算一组数和的方法
2015/05/07 Python
详解Python的Flask框架中生成SECRET_KEY密钥的方法
2016/06/07 Python
python实现微信接口(itchat)详细介绍
2017/10/23 Python
Python将一个Excel拆分为多个Excel
2018/11/07 Python
python字符串和常用数据结构知识总结
2019/05/21 Python
python实现证件照换底功能
2019/08/20 Python
python isinstance函数用法详解
2020/02/13 Python
Python Django路径配置实现过程解析
2020/11/05 Python
python 用opencv实现图像修复和图像金字塔
2020/11/27 Python
html5 Web SQL Database 之事务处理函数transaction与executeSQL解析
2013/11/07 HTML / CSS
荷兰手表网站:Watch2Day
2018/07/02 全球购物
软件生产职位结构化面试主要考察要素及面试题库
2015/06/12 面试题
爱情保证书范文
2014/02/01 职场文书
信息科学与技术专业求职信范文
2014/02/20 职场文书
党的群众路线教育实践活动个人对照检查材料(企业)
2014/11/05 职场文书
2015年推广普通话演讲稿
2015/03/20 职场文书
如何使用Python对NetCDF数据做空间相关分析
2021/04/21 Python
JavaScript 与 TypeScript之间的联系
2021/11/27 Javascript
Win11 BitLocker 驱动器加密
2022/04/19 数码科技