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 相关文章推荐
一个可以找出源代码中所有中文的工具
Oct 25 PHP
用PHP查询域名状态whois的类
Nov 25 PHP
PHP获得用户使用的代理服务器ip即真实ip
Dec 31 PHP
PHP学习笔记之二 php入门知识
Jan 12 PHP
php中判断字符串是否全是中文或含有中文的实现代码
Sep 16 PHP
php中substr()函数参数说明及用法实例
Nov 15 PHP
php输出xml属性的方法
Mar 19 PHP
php中执行系统命令的方法
Mar 21 PHP
PHP使用CURL实现多线程抓取网页
Apr 30 PHP
yii去掉必填项中星号的方法
Dec 28 PHP
mac os快速切换多个PHP版本的方法
Mar 07 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
Nov 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语言中global和$GLOBALS[]的分析 之二
2012/02/02 PHP
PHP魔术方法__GET、__SET使用实例
2014/11/25 PHP
php数据访问之增删改查操作
2016/05/09 PHP
PHP下载文件函数与用法示例
2019/09/27 PHP
jQuery在vs2008及js文件中的无智能提示的解决方法
2010/12/30 Javascript
图片轮换效果实现代码(点击按钮停止执行)
2013/04/12 Javascript
JavaScript学习笔记之JS函数
2015/01/22 Javascript
jQuery Ajax调用WCF服务详细教程
2015/03/31 Javascript
jQuery中数据缓存$.data的用法及源码完全解析
2016/04/29 Javascript
javascript如何创建对象
2016/08/29 Javascript
Angularjs 设置全局变量的方法总结
2016/10/20 Javascript
Jquery通过ajax请求NodeJS返回json数据实例
2016/11/08 NodeJs
js判断手机系统是android还是ios
2017/03/07 Javascript
微信小程序实现图片轮播及文件上传
2017/04/07 Javascript
页面内锚点定位及跳转方法总结(推荐)
2019/04/24 Javascript
js实现图片推拉门效果代码实例
2019/05/18 Javascript
vue登录页面cookie的使用及页面跳转代码
2019/07/10 Javascript
vue更改数组中的值实例代码详解
2020/02/07 Javascript
原生js实现五子棋游戏
2020/05/28 Javascript
[03:01]完美世界DOTA2联赛PWL S2 集锦第二期
2020/12/03 DOTA
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
2014/06/10 Python
Python常用知识点汇总
2016/05/08 Python
Python之pymysql的使用小结
2019/07/01 Python
简单瞅瞅Python vars()内置函数的实现
2019/09/27 Python
ASP.NET Core中的配置详解
2021/02/05 Python
英国家具、照明、家居用品网上商店:Wayfair.co.uk
2020/02/13 全球购物
公益活动策划方案
2014/01/09 职场文书
小区停车场管理制度
2014/01/27 职场文书
班风口号
2014/06/18 职场文书
我的中国梦演讲稿600字
2014/08/19 职场文书
数学教师个人工作总结
2015/02/06 职场文书
公安纪律作风整顿心得体会
2016/01/23 职场文书
穷人该怎么创业?谨记以下几点
2019/07/11 职场文书
详解Laravel服务容器的优势
2021/05/29 PHP
Django Paginator分页器的使用示例
2021/06/23 Python
直播实况, OMG破敌三路五十分钟大战神技局摩托车
2022/04/01 DOTA