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
利用Memcached在php下实现session机制 替换PHP的原生session支持
Aug 21 PHP
提示Trying to clone an uncloneable object of class Imagic的解决
Oct 27 PHP
php使用fsockopen函数发送post,get请求获取网页内容的方法
Nov 15 PHP
php计算数组相同值出现次数的代码(array_count_values)
Jan 20 PHP
php实现将wav文件转换成图像文件并在页面中显示的方法
Apr 21 PHP
php简单判断两个字符串是否相等的方法
Jul 13 PHP
使用xampp搭建运行php虚拟主机的详细步骤
Oct 21 PHP
php操作xml并将其插入数据库的实现方法
Sep 08 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
Sep 28 PHP
因str_replace导致的注入问题总结
Aug 08 PHP
PHP上传图片到数据库并显示的实例代码
Dec 20 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
解决phpmyadmin 乱码,支持gb2312和utf-8
2006/11/20 PHP
php IP及IP段进行访问限制的代码
2008/12/17 PHP
CodeIgniter控制器之业务逻辑实例分析
2016/01/20 PHP
PHP生成随机字符串实例代码(字母+数字)
2019/09/11 PHP
前台js对象在后台转化java对象的问题探讨
2013/12/20 Javascript
jQuery简单实现上下,左右滑动的方法
2016/06/01 Javascript
Js调用Java方法并互相传参的简单实例
2016/08/11 Javascript
BootStrapTable服务器分页实例解析
2016/12/20 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
PHP实现本地图片上传和验证功能
2017/02/27 Javascript
vue组件传递对象中实现单向绑定的示例
2018/02/28 Javascript
深入理解nodejs搭建静态服务器(实现命令行)
2019/02/05 NodeJs
Vue实现表格批量审核功能实例代码
2019/05/28 Javascript
通过js给网页加上水印背景实例
2019/06/17 Javascript
vue计算属性无法监听到数组内部变化的解决方案
2019/11/06 Javascript
JS实现购物车基本功能
2020/11/08 Javascript
python基础教程之实现石头剪刀布游戏示例
2014/02/11 Python
python 多进程通信模块的简单实现
2014/02/20 Python
详细探究Python中的字典容器
2015/04/14 Python
使用Python编写一个模仿CPU工作的程序
2015/04/16 Python
Python抽象类的新写法
2015/06/18 Python
浅谈Python数据类型之间的转换
2016/06/08 Python
python3编码问题汇总
2016/09/06 Python
利用Tensorflow的队列多线程读取数据方式
2020/02/05 Python
Python拼接字符串的7种方式详解
2020/03/19 Python
django模型类中,null=True,blank=True用法说明
2020/07/09 Python
python+selenium 简易地疫情信息自动打卡签到功能的实现代码
2020/08/22 Python
PyTorch中Tensor的数据类型和运算的使用
2020/09/03 Python
html5 worker 实例(二) 图片变换效果
2013/06/24 HTML / CSS
Canvas 帧动画吃苹果小游戏
2020/08/05 HTML / CSS
小学国旗下的演讲稿
2014/08/28 职场文书
2014乡镇党委副书记对照检查材料思想汇报
2014/10/09 职场文书
北京英语导游词
2015/02/12 职场文书
新郎新娘致辞
2015/07/31 职场文书
积极心理学课程心得体会
2016/01/22 职场文书
小学一年级语文教学反思
2016/03/03 职场文书