浅谈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与javascript的两种交互方式
Oct 09 PHP
附件名前加网站名
Mar 23 PHP
php错误提示failed to open stream: HTTP request failed!的完美解决方法
Jun 06 PHP
php数组的一些常见操作汇总
Jul 17 PHP
深入php self与$this的详解
Jun 08 PHP
PHP依赖倒置(Dependency Injection)代码实例
Oct 11 PHP
THINKPHP支持YAML配置文件的设置方法
Mar 17 PHP
PHP通过微信跳转的Code参数获取用户的openid(关键代码)
Jul 06 PHP
THinkPHP获取客户端IP与IP地址查询的方法
Nov 14 PHP
thinkPHP5.0框架独立配置与动态配置方法
Mar 17 PHP
PHP结合Vue实现滚动底部加载效果
Dec 17 PHP
PHP实现微信小程序人脸识别刷脸登录功能
May 24 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新手上路(八)
2006/10/09 PHP
php中将时间差转换为字符串提示的实现代码
2011/08/08 PHP
PHP5.3与5.5废弃与过期函数整理汇总
2014/07/10 PHP
thinkPHP3.1验证码的简单实现方法
2016/04/22 PHP
javascript 避免闭包引发的问题
2009/03/17 Javascript
javascript 对象定义方法 简单易学
2009/03/22 Javascript
一个简单的jQuery插件制作 学习过程及实例
2010/04/25 Javascript
火狐textarea输入法的bug的触发及解决
2013/07/24 Javascript
JavaScript函数详解
2014/11/17 Javascript
浅析script标签中的defer与async属性
2016/11/30 Javascript
浅谈Angular的$q, defer, promise
2016/12/20 Javascript
JS中解决谷歌浏览器记住密码输入框颜色改变功能
2017/02/13 Javascript
vue时间格式化实例代码
2017/06/13 Javascript
JavaScript中this关键字用法实例分析
2018/08/24 Javascript
vue根据值给予不同class的实例
2018/09/29 Javascript
解析Python中的二进制位运算符
2015/05/13 Python
python使用正则表达式提取网页URL的方法
2015/05/26 Python
python中的格式化输出用法总结
2016/07/28 Python
Python脚本获取操作系统版本信息
2016/12/17 Python
python实现批量修改文件名代码
2017/09/10 Python
Python中的defaultdict与__missing__()使用介绍
2018/02/03 Python
对python中词典的values值的修改或新增KEY详解
2019/01/20 Python
在python中修改.properties文件的操作
2020/04/08 Python
python轮询机制控制led实例
2020/05/03 Python
CSS3只让背景图片旋转180度的实现示例
2021/03/09 HTML / CSS
介绍一下Java的安全机制
2012/06/28 面试题
迟到检讨书1000字
2014/01/15 职场文书
论文指导教师评语
2014/04/28 职场文书
2015年全国爱耳日活动总结
2015/02/27 职场文书
培训班通知
2015/04/25 职场文书
宝宝满月祝酒词
2015/08/10 职场文书
汽车车尾标语大全
2015/08/11 职场文书
Django实现翻页的示例代码
2021/05/24 Python
浅谈python数据类型及其操作
2021/05/25 Python
FFmpeg视频处理入门教程(新手必看)
2022/01/22 杂记
JAVA springCloud项目搭建流程
2022/05/11 Java/Android