浅谈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用身份证号获取星座和生肖的方法
Nov 07 PHP
ThinkPHP CURD方法之table方法详解
Jun 18 PHP
PHP获取MySql新增记录ID值的3种方法
Jun 24 PHP
PHP将回调函数作用到给定数组单元的方法
Aug 19 PHP
PHP里8个鲜为人知的安全函数分析
Dec 09 PHP
再Docker中架设完整的WordPress站点全攻略
Jul 29 PHP
PHP扩展框架之Yaf框架的安装与使用
May 18 PHP
如何使用PHP给图片加水印
Oct 12 PHP
thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
Sep 07 PHP
PHP下载大文件失败并限制下载速度的实例代码
May 10 PHP
php 多继承的几种常见实现方法示例
Nov 18 PHP
php的单例模式及应用场景详解
Feb 27 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下实现在指定目录搜索指定类型文件的函数
2008/10/03 PHP
php提示Failed to write session data错误的解决方法
2014/12/17 PHP
php 猴子摘桃的算法
2017/06/20 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
PHP单例模式实例分析【防继承,防克隆操作】
2019/05/22 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
JSON 教程 json入门学习笔记
2020/09/22 Javascript
js 上下左右键控制焦点(示例代码)
2013/12/14 Javascript
关于img的href和src取变量及赋值的方法
2014/04/28 Javascript
HTML页面登录时的JS验证方法
2014/05/28 Javascript
jquery实现网页的页面平滑滚动效果代码
2015/11/02 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
Chrome浏览器的alert弹窗禁止再次弹出后恢复的方法
2016/12/30 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
实现一个完整的Node.js RESTful API的示例
2017/09/29 Javascript
vue2.0 datepicker使用方法
2018/02/04 Javascript
vue拦截器实现统一token,并兼容IE9验证功能
2018/04/26 Javascript
JavaScript读写二进制数据的方法详解
2018/09/09 Javascript
vue-router重写push方法,解决相同路径跳转报错问题
2020/08/07 Javascript
详解如何使用React Hooks请求数据并渲染
2020/10/18 Javascript
python中enumerate函数用法实例分析
2015/05/20 Python
Python pandas常用函数详解
2018/02/07 Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
2019/08/08 Python
python 公共方法汇总解析
2019/09/16 Python
基于pytorch的lstm参数使用详解
2020/01/14 Python
Pytorch 实现数据集自定义读取
2020/01/18 Python
美国床垫连锁店:Mattress Firm
2021/02/13 全球购物
OLEDBConnection和SQLConnection有什么区别
2013/05/31 面试题
临床医师专业个人自我评价
2014/01/08 职场文书
服装创业计划书范文
2014/02/05 职场文书
房屋买卖委托公证书
2014/04/08 职场文书
2015年教研工作总结
2015/05/23 职场文书
运动会口号霸气押韵
2015/12/24 职场文书
雄兵连:第三季先行图公开,天使恶魔联合,银河之力的新力量
2021/06/11 国漫
MySQL实现用逗号进行拼接、以逗号进行分割
2022/12/24 MySQL