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 相关文章推荐
建立动态的WML站点(三)
Oct 09 PHP
在VS2008中编译MYSQL5.1.48的方法
Jul 03 PHP
PHP实现的交通银行网银在线支付接口ECSHOP插件和使用例子
May 10 PHP
PHPMailer发送HTML内容、带附件的邮件实例
Jul 01 PHP
php 解决substr()截取中文字符乱码问题
Jul 18 PHP
Yii针对添加行的增删改查操作示例
Oct 18 PHP
php PDO异常处理详解
Nov 20 PHP
yii2.0整合阿里云oss删除单个文件的方法
Sep 19 PHP
PHP+Apache环境中如何隐藏Apache版本
Nov 24 PHP
php微信公众号开发之答题连闯三关
Oct 20 PHP
laravel框架使用阿里云短信发送消息操作示例
Feb 15 PHP
PHP标准库 (SPL)――Countable用法示例
Jun 05 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
将数字格式的计算结果转为汉字格式
2006/10/09 PHP
smarty模板嵌套之include与fetch性能测试
2010/12/05 PHP
通过php快速统计某个数据库中每张表的数据量
2012/09/04 PHP
php数组指针操作详解
2017/02/14 PHP
关于Curl在Swoole协程中的解决方案详析
2019/09/12 PHP
Jquery实战_读书笔记1—选择jQuery
2010/01/22 Javascript
基于jquery的blockui插件显示弹出层
2011/04/14 Javascript
用Jquery.load载入页面实现局部刷新
2014/01/22 Javascript
javascript函数式编程实例分析
2015/04/25 Javascript
js简单实现竖向tab选项卡的方法
2015/05/04 Javascript
jsonp跨域请求数据实现手机号码查询实例分析
2015/12/12 Javascript
仿百度换肤功能的简单实例代码
2016/07/11 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
2016/07/28 Javascript
JS中解决谷歌浏览器记住密码输入框颜色改变功能
2017/02/13 Javascript
JavaScript实现Tab选项卡切换
2020/02/13 Javascript
详解 javascript对象创建模式
2020/10/30 Javascript
python多线程编程中的join函数使用心得
2014/09/02 Python
python optparse模块使用实例
2015/04/09 Python
python实现DES加密解密方法实例详解
2015/06/30 Python
python实现将内容分行输出
2015/11/05 Python
利用python解决mysql视图导入导出依赖的问题
2017/12/17 Python
python使用openpyxl库修改excel表格数据方法
2018/05/03 Python
基于python实现KNN分类算法
2020/04/23 Python
在交互式环境中执行Python程序过程详解
2019/07/12 Python
Python实现把多维数组展开成DataFrame
2019/11/30 Python
python进程的状态、创建及使用方法详解
2019/12/06 Python
Django2 连接MySQL及model测试实例分析
2019/12/10 Python
python实现简单颜色识别程序
2020/02/19 Python
浅谈Keras参数 input_shape、input_dim和input_length用法
2020/06/29 Python
Python3爬虫中关于中文分词的详解
2020/07/29 Python
css3 2D图片转动样式可以扩充到Js当中
2014/04/29 HTML / CSS
早读迟到检讨书
2014/01/24 职场文书
付款委托书范本
2014/04/04 职场文书
委托书怎样写
2014/08/30 职场文书
考试没考好检讨书
2015/05/06 职场文书
2015年政治教研组工作总结
2015/07/22 职场文书