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+DBM的同学录程序(3)
Oct 09 PHP
用php+mysql一个名片库程序
Oct 09 PHP
PHP新手上路(五)
Oct 09 PHP
PHP中的函数嵌套层数限制分析
Jun 13 PHP
关于php连接mssql:pdo odbc sql server
Jul 20 PHP
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
Jun 07 PHP
php过滤敏感词的示例
Mar 31 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
Apr 29 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
Jan 11 PHP
PHP用PDO如何封装简单易用的DB类详解
Jul 30 PHP
通过源码解析Laravel的依赖注入
Jan 22 PHP
提高Laravel应用性能方法详解
Jun 24 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
使用数据库保存session的方法
2006/10/09 PHP
php配置php-fpm启动参数及配置详解
2013/11/04 PHP
PHP三元运算的2种写法代码实例
2014/05/12 PHP
Yii2下点击验证码的切换实例代码
2017/03/14 PHP
PHP使用文件锁解决高并发问题示例
2018/03/29 PHP
php-fpm添加service服务的例子
2018/04/27 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
2020/03/23 PHP
JQuery AJAX提交中文乱码的解决方案
2010/07/02 Javascript
jquery+ajax每秒向后台发送请求数据然后返回页面的代码
2011/01/17 Javascript
利用JQuery动画制作滑动菜单项效果实现步骤及代码
2013/02/07 Javascript
通过javascript获取iframe里的值示例代码
2013/06/24 Javascript
jquery 实现窗口的最大化不论什么情况
2013/09/03 Javascript
javascript 终止函数执行操作
2014/02/14 Javascript
javascript框架设计读书笔记之种子模块
2014/12/02 Javascript
JavaScript实现数字数组按照倒序排列的方法
2015/04/06 Javascript
jQuery获取checkbox选中的值
2016/01/28 Javascript
jQuery实现摸拟alert提示框
2016/05/22 Javascript
最好用的Bootstrap fileinput.js文件上传组件
2016/12/12 Javascript
JavaScript 栈的详解及实例代码
2017/01/22 Javascript
Vue.js 插件开发详解
2017/03/29 Javascript
js实现图片无缝循环轮播
2019/10/28 Javascript
react PropTypes校验传递的值操作示例
2020/04/28 Javascript
ES6新增的数组知识实例小结
2020/05/23 Javascript
跟老齐学Python之数据类型总结
2014/09/24 Python
python实现根据用户输入从电影网站获取影片信息的方法
2015/04/07 Python
Python3 socket同步通信简单示例
2017/06/07 Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
2018/05/24 Python
Python 使用type来定义类的实现
2019/11/19 Python
python正则表达式实例代码
2020/03/03 Python
Python gevent协程切换实现详解
2020/09/14 Python
利用python批量爬取百度任意类别的图片的实现方法
2020/10/07 Python
python+excel接口自动化获取token并作为请求参数进行传参操作
2020/11/10 Python
机关作风建设自查报告
2014/10/22 职场文书
毕业生评语大全
2015/01/04 职场文书
大学生安全教育主题班会
2015/08/12 职场文书
详解nginx location指令
2022/01/18 Servers