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的类 功能齐全的发送邮件类
Oct 09 PHP
PHP 命名空间实例说明
Jan 27 PHP
求PHP数组最大值,最小值的代码
Oct 31 PHP
php的hash算法介绍
Feb 13 PHP
php通过修改header强制图片下载的方法
Mar 24 PHP
分享php分页的功能模块
Jun 16 PHP
php数组比较实现查找连续数的方法
Jul 29 PHP
Symfony2安装的方法(2种方法)
Feb 04 PHP
PHP简单遍历对象示例
Sep 28 PHP
PHP微信分享开发详解
Jan 14 PHP
php自定义截取中文字符串-utf8版
Feb 27 PHP
Laravel构建即时应用的一种实现方法详解
Aug 31 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
日本十大惊悚动漫
2020/03/04 日漫
php 处理上百万条的数据库如何提高处理查询速度
2010/02/08 PHP
PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)
2016/04/01 PHP
PHP基于GD2函数库实现验证码功能示例
2019/01/27 PHP
PHP 99乘法表的几种实现代码
2020/10/13 PHP
Javascript开发包大全整理
2006/12/22 Javascript
Input 特殊事件onpopertychange和oninput
2009/06/17 Javascript
JS 有趣的eval优化输入验证实例代码
2013/09/22 Javascript
JS绘制生成花瓣效果的方法
2015/08/05 Javascript
AngularJS中的包含详细介绍及实现示例
2016/07/28 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
2016/08/17 Javascript
原生JS版和jquery版实现checkbox的全选/全不选/点选/行内点选(Mr.Think)
2016/10/29 Javascript
js与jquery分别实现tab标签页功能的方法
2016/11/18 Javascript
bootstrap-table实现服务器分页的示例 (spring 后台)
2017/09/01 Javascript
一文搞懂ES6中的Map和Set
2019/05/20 Javascript
JS数组进阶示例【数组的几种函数用法】
2020/01/16 Javascript
基于JavaScript实现随机点名器
2021/02/25 Javascript
python实现线程池的方法
2015/06/30 Python
python书籍信息爬虫实例
2018/03/19 Python
自定义django admin model表单提交的例子
2019/08/23 Python
Python Tensor FLow简单使用方法实例详解
2020/01/14 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
如何表示python中的相对路径
2020/07/08 Python
使用Python解析Chrome浏览器书签的示例
2020/11/13 Python
使用CSS3的背景渐变Text Gradient 创建文字颜色渐变
2014/08/19 HTML / CSS
阿玛尼美妆加拿大官方商城:Giorgio Armani Beauty加拿大
2017/10/24 全球购物
入党转预备思想汇报
2014/01/07 职场文书
出生医学证明样本
2014/01/17 职场文书
工程招投标邀请书
2014/01/26 职场文书
水利水电建筑施工应届生求职信
2014/07/04 职场文书
个人务虚会发言材料
2014/10/20 职场文书
走群众路线学习心得体会
2014/10/31 职场文书
入党自荐书范文
2015/03/05 职场文书
借款民事起诉状范文
2015/05/19 职场文书
工程款催款函
2015/06/24 职场文书
Golang jwt身份认证
2022/04/20 Golang