浅谈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 相关文章推荐
global.php
Dec 09 PHP
精通php的十大要点(上)
Feb 04 PHP
浅谈PHP 闭包特性在实际应用中的问题
Oct 30 PHP
PHP循环函数使用介绍之PHP基础入门教程
Sep 21 PHP
php调整gif动画图片尺寸示例代码分享
Dec 05 PHP
PHP中spl_autoload_register()和__autoload()区别分析
May 10 PHP
PHP图形操作之Jpgraph学习笔记
Dec 25 PHP
学习PHP的数组总结【经验】
May 05 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
Feb 17 PHP
PHP实现实时生成并下载超大数据量的EXCEL文件详解
Oct 23 PHP
Laravel下生成验证码的类
Nov 15 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
Oct 14 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
聊天室php&amp;mysql(五)
2006/10/09 PHP
php中经典方法实现判断多维数组是否为空
2011/10/23 PHP
PHP通过session id 实现session共享和登录验证的代码
2012/06/03 PHP
php 二维数组时间排序实现代码
2016/11/19 PHP
PHP 实现浏览记录并按日期分组
2017/05/11 PHP
jQueryUI的Dialog的简单封装
2010/06/07 Javascript
jquery 插件学习(四)
2012/08/06 Javascript
jQuery 获取URL的GET参数值的小例子
2013/04/18 Javascript
js点击更换背景颜色或图片的实例代码
2013/06/25 Javascript
jquery实现浮动的侧栏实例
2015/06/25 Javascript
常用原生JS兼容性写法汇总
2016/04/27 Javascript
Javascript blur与click冲突解决办法
2017/01/09 Javascript
jQuery自定义图片上传插件实例代码
2017/04/04 jQuery
js控制文本框禁止输入特殊字符详解
2017/04/07 Javascript
get  post jsonp三种数据交互形式实例详解
2017/08/25 Javascript
vue1.0和vue2.0的watch监听事件写法详解
2018/09/11 Javascript
Vue中控制v-for循环次数的实现方法
2018/09/26 Javascript
ES6知识点整理之模块化的应用详解
2019/04/15 Javascript
如何搜索查找并解决Django相关的问题
2014/06/30 Python
Python图像灰度变换及图像数组操作
2016/01/27 Python
Python GUI Tkinter简单实现个性签名设计
2018/06/19 Python
python实现简单多人聊天室
2018/12/11 Python
Tensorflow累加的实现案例
2020/02/05 Python
html5 worker 实例(一) 为什么测试不到效果
2013/06/24 HTML / CSS
英国版MAC彩妆品牌:Illamasqua
2018/04/18 全球购物
本科生求职简历的自我评价
2013/10/21 职场文书
毕业生实习鉴定
2013/12/11 职场文书
大学生职业生涯规划范文
2013/12/31 职场文书
优秀导游先进事迹材料
2014/01/25 职场文书
上课睡觉检讨书
2014/01/28 职场文书
电子商务专业学生职业生涯规划
2014/03/07 职场文书
党员教师工作决心书
2014/03/13 职场文书
十岁生日答谢词
2015/01/05 职场文书
药品销售内勤岗位职责
2015/04/13 职场文书
婚礼领导致辞大全
2015/07/28 职场文书
读《人生的智慧》有感:闲暇是人生的精华
2019/12/25 职场文书