浅谈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 相关文章推荐
动态网站web开发 PHP、ASP还是ASP.NET
Oct 09 PHP
PHP 获取客户端真实IP地址多种方法小结
May 15 PHP
PHP自动选择 连接本地还是远程数据库
Dec 02 PHP
php 文章调用类代码
Aug 11 PHP
PHP5中Cookie与 Session使用详解
Apr 30 PHP
PHP实现在线阅读PDF文件的方法
Jun 17 PHP
laravel中的错误与日志用法详解
Jul 26 PHP
php执行多个存储过程的方法【基于thinkPHP】
Nov 08 PHP
360搜索引擎自动收录php改写方案
Apr 28 PHP
PHP中localeconv()函数的用法
Mar 26 PHP
THINKPHP5.1 Config的配置与获取详解
Jun 08 PHP
PHP实现限制域名访问的实现代码(本地验证)
Sep 13 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获取中英混合字符串长度的方法
2014/06/07 PHP
简单实现PHP留言板功能
2016/12/21 PHP
关于PHP定时发送服务的解决办法
2017/04/23 PHP
PHP实现数据库的增删查改功能及完整代码
2018/04/18 PHP
JavaScript中的私有成员
2006/09/18 Javascript
Jquery 最近浏览过的商品的功能实现代码
2010/05/14 Javascript
Whatever:hover 无需javascript让IE支持丰富伪类
2010/06/29 Javascript
jQuery 幻灯片插件(带缩略图功能)
2011/01/24 Javascript
jquery实现在页面加载完毕后获取图片高度或宽度
2014/06/16 Javascript
JavaScript中数组的合并以及排序实现示例
2015/10/24 Javascript
基于javascript实现图片左右切换效果
2016/01/25 Javascript
JavaScript中的普通函数和箭头函数的区别和用法详解
2017/03/21 Javascript
webpack中的热刷新与热加载的区别
2018/04/09 Javascript
详解Vue2.0配置mint-ui踩过的那些坑
2018/04/23 Javascript
深入分析element ScrollBar滚动组件源码
2019/01/22 Javascript
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
2019/07/15 Javascript
layui实现checkbox的目录树tree的例子
2019/09/12 Javascript
解决js中的setInterval清空定时器不管用问题
2020/11/17 Javascript
python绘图库Matplotlib的安装
2014/07/03 Python
python执行子进程实现进程间通信的方法
2015/06/02 Python
Python通过future处理并发问题
2017/10/17 Python
python+opencv识别图片中的圆形
2020/03/25 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
对python中字典keys,values,items的使用详解
2019/02/03 Python
django+echart数据动态显示的例子
2019/08/12 Python
Python assert关键字原理及实例解析
2019/12/13 Python
python中有帮助函数吗
2020/06/19 Python
python中pyqtgraph知识点总结
2021/01/26 Python
Marmot土拨鼠官网:美国专业户外运动品牌
2018/01/11 全球购物
Farfetch阿联酋:奢侈品牌时尚购物平台
2019/07/26 全球购物
自荐书封面下载
2013/11/29 职场文书
如何写好升职自荐信
2014/01/06 职场文书
大学生涯自我鉴定
2014/01/16 职场文书
幼儿教师考核制度
2014/01/25 职场文书
三年级语文教学反思
2014/02/01 职场文书
我爱我校演讲稿
2014/05/21 职场文书