浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)


Posted in PHP onMarch 14, 2017

实例如下:

<?php
/*分治法——直接选择
比如说a b c
首先将a之后的字符依次与a进行交换
1 b,a,c
2 c,b,a
注意这里少了一个原始数据 a,b,c。需要把原始数据也算如排列中
3 a,b,c

然后把字符移到第二个位置,将第二个位置之后的数分别与第二个位置的数进行交换
1 b,a,c ===> 11 b,c,a
2 c,b,a ===> 21 c,a,b
3 a,b,c ===> 31 a,c,b

**/
function zuhe($arr,$begin){
  if(!is_array($arr)) return ;
  $N = count($arr);
  if($begin == $N-1 || $begin >$N || $begin <0) return ;
  if($begin == 0){
    print_r($arr);//输出原始数据
    echo '</br>';
  } 
  //循环将初始值与第i个值交换后进行组合
  for($i = $begin;$i < $N;$i++){

    $t = $arr[$begin];
    $arr[$begin] = $arr[$i];
    $arr[$i] = $t;

    if($i!==$begin){//i==begin时的数已经输出过
      print_r($arr);
      echo '</br>';
    }
    zuhe($arr,$begin+1);  
    $t = $arr[$begin];
    $arr[$begin] = $arr[$i];
    $arr[$i] = $t;

  }
}

$arr = array('a','b','c','d');
//zuhe($arr,0);


/*分治法——直接插入
初始时从0个元素开始,输出初始序列,为组合的一个序列
当在来一个元素时只需将该元素放在该元素之前的元素组的不同的位置即组成了不同的排列
如已有元素组为a,b.新元素为c,把c分别与a,b进行交换即可(a,c,b);(c,b,a),在现有的排列上在新增元素
重复执行以上步骤
*/
function zuhe2($arr,$begin){
  if($begin==0) {
    print_r($arr);
    echo "</br>";
    //zuhe2($arr,$begin+1);
  }
  if($begin >= count($arr)) return ;
  zuhe2($arr,$begin+1);//begin时的排列上一次已产生,直接新增元素
  for($i = $begin-1;$i>=0;$i--){
    $t = $arr[$begin];
    $arr[$begin] = $arr[$i];
    $arr[$i] = $t;
    print_r($arr);
    echo "</br>";
    zuhe2($arr,$begin +1);
    $t = $arr[$begin];
    $arr[$begin] = $arr[$i];
    $arr[$i] = $t;
  }
}

以上这篇浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP strtr() 函数使用说明
Nov 21 PHP
PHP 中文乱码解决办法总结分析
Jul 30 PHP
完美实现GIF动画缩略图的php代码
Jan 02 PHP
php 中英文语言转换类代码
Aug 11 PHP
mysqli_set_charset和SET NAMES使用抉择及优劣分析
Jan 13 PHP
PHP读MYSQL中文乱码的快速解决方法
Oct 01 PHP
PHP构造二叉树算法示例
Jun 21 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
Nov 10 PHP
Ubuntu上安装yaf扩展的方法
Jan 29 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 10 PHP
总结PHP中初始化空数组的最佳方法
Feb 13 PHP
php实现统计IP数及在线人数的示例代码
Jul 22 PHP
php求数组全排列,元素所有组合的方法总结
Mar 14 #PHP
PHP输出多个元素的排列或组合的方法
Mar 14 #PHP
Linux下快速搭建php开发环境
Mar 13 #PHP
php创建图像具体步骤
Mar 13 #PHP
PHP+MYSQL实现读写分离简单实战
Mar 13 #PHP
PHP计算近1年的所有月份
Mar 13 #PHP
PHP解耦的三重境界(浅谈服务容器)
Mar 13 #PHP
You might like
jquery 中ajax执行的优先级
2015/06/22 Javascript
详解JavaScript正则表达式之RegExp对象
2015/12/13 Javascript
分享有关jQuery中animate、slide、fade等动画的连续触发、滞后反复执行的bug
2016/01/10 Javascript
JS原型、原型链深入理解
2016/02/27 Javascript
Node.js包管理器Yarn的入门介绍与安装
2016/10/17 Javascript
JS实现淡入淡出图片效果的方法分析
2016/12/20 Javascript
ajax图片上传,图片异步上传,更新实例
2016/12/30 Javascript
js判断手机系统是android还是ios
2017/03/07 Javascript
关于jquery中attr()和prop()方法的区别
2018/05/28 jQuery
vue指令只能输入正数并且只能输入一个小数点的方法
2018/06/08 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
2018/09/17 Javascript
快速对接payjq的个人微信支付接口过程解析
2019/08/15 Javascript
layui radio点击事件实现input显示和隐藏的例子
2019/09/02 Javascript
Vue路由对象属性 .meta $route.matched详解
2019/11/04 Javascript
vue之组件内监控$store中定义变量的变化详解
2019/11/08 Javascript
在vue项目中封装echarts的步骤
2020/12/25 Vue.js
[03:55]显微镜下的DOTA2特别篇——430灰烬之灵神级操作
2014/06/24 DOTA
几种实用的pythonic语法实例代码
2018/02/24 Python
python学习入门细节知识点
2018/03/29 Python
Python实现的knn算法示例
2018/06/14 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
2018/07/17 Python
pycharm: 恢复(reset) 误删文件的方法
2018/10/22 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
2020/09/17 Python
对Tensorflow中Device实例的生成和管理详解
2020/02/04 Python
python Gabor滤波器讲解
2020/10/26 Python
美国最便宜的旅游网站:CheapTickets
2017/07/09 全球购物
HTC VIVE美国官网:VR虚拟现实眼镜
2018/02/13 全球购物
百度JavaScript笔试题
2015/01/15 面试题
精彩的英文自荐信
2014/01/30 职场文书
竞聘书格式及范文
2014/03/31 职场文书
团队经理竞聘书
2014/03/31 职场文书
爱心捐款倡议书
2014/04/14 职场文书
科技工作者先进事迹
2014/08/16 职场文书
医院领导班子四风对照检查材料
2014/09/27 职场文书
2014年保卫部工作总结
2014/11/21 职场文书
2015年售后服务工作总结
2015/04/25 职场文书