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扩展介绍与开发教程
Aug 19 PHP
jQuery 源码分析笔记
May 25 PHP
PHP输入流php://input介绍
Sep 18 PHP
php ci框架中加载css和js文件失败的原因及解决方法
Jul 29 PHP
typecho插件编写教程(一):Hello World
May 28 PHP
利用PHP获取网站访客的所在地位置
Jan 18 PHP
php unicode编码和字符串互转的方法
Aug 12 PHP
yii2.0整合阿里云oss删除单个文件的方法
Sep 19 PHP
PHP curl批处理及多请求并发实现方法分析
Aug 15 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
Apr 23 PHP
PHP实现Snowflake生成分布式唯一ID的方法示例
Aug 30 PHP
PHP连接MySQL数据库三种实现方法
Dec 10 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
当年上海收录机产品生产,进口和价格情况
2021/03/04 无线电
一个用于网络的工具函数库
2006/10/09 PHP
详解php中空字符串和0之间的关系
2016/10/23 PHP
记录一次排查PHP脚本执行卡住的问题
2016/12/27 PHP
深入浅析安装PhpStorm并激活的步骤详解
2020/09/17 PHP
jQuery弹出层插件简化版代码下载
2008/10/16 Javascript
jQuery取得select选择的文本与值的示例
2013/12/09 Javascript
分享28款免费实用的 JQuery 图片和内容滑块插件
2014/12/15 Javascript
深入理解JavaScript编程中的同步与异步机制
2015/06/24 Javascript
JQuery.Ajax()的data参数类型实例详解
2015/11/20 Javascript
深入分析Javascript事件代理
2016/01/30 Javascript
浅谈JavaScript 数据属性和访问器属性
2016/09/01 Javascript
浅谈jquery中使用canvas的问题
2016/10/10 Javascript
js实现二级导航功能
2017/03/03 Javascript
javaScript和jQuery自动加载简单代码实现方法
2017/11/24 jQuery
vue实现类似淘宝商品评价页面星级评价及上传多张图片功能
2018/10/29 Javascript
ES6 Object方法扩展的应用实例分析
2019/06/25 Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
2019/08/07 Javascript
[01:04:05]VG vs Newbee 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python3里的super()和__class__使用介绍
2015/04/23 Python
详解在Python程序中解析并修改XML内容的方法
2015/11/16 Python
浅谈Python中用datetime包进行对时间的一些操作
2016/06/23 Python
python创建文件备份的脚本
2018/09/11 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
Python常用爬虫代码总结方便查询
2019/02/25 Python
python代理工具mitmproxy使用指南
2019/07/04 Python
python socket 聊天室实例代码详解
2019/11/14 Python
div或img图片高度随宽度自适应的方法
2020/02/06 HTML / CSS
猫途鹰:全球领先的旅游点评社区
2017/04/07 全球购物
SkinCeuticals官网:美国药妆品牌
2018/04/19 全球购物
SHEIN香港:价格实惠的女性时尚服装
2018/08/14 全球购物
入团者的自我评价分享
2013/12/02 职场文书
大学生涯自我鉴定
2014/01/16 职场文书
红高粱观后感
2015/06/10 职场文书
未发现nvidia显卡怎么办?Win11系统中未检测到nvidia显卡解决教程
2022/04/08 数码科技
JavaScript圣杯布局与双飞翼布局实现案例详解
2022/08/05 Javascript