浅谈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 相关文章推荐
文件上传的实现
Oct 09 PHP
PHP5.3.1 不再支持ISAPI
Jan 08 PHP
php FLEA中二叉树数组的遍历输出
Sep 26 PHP
PHP无限分类(树形类)的深入分析
Jun 02 PHP
php读取excel文件示例分享(更新修改excel)
Feb 27 PHP
thinkphp模板赋值与替换实例简述
Nov 24 PHP
PHP封装的MSSql操作类完整实例
May 26 PHP
php实现将HTML页面转换成word并且保存的方法
Oct 14 PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
Jan 15 PHP
Yii2框架类自动加载机制实例分析
May 02 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
Aug 20 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
Jul 06 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 使用curl模拟登录人人(校内)网的简单实例
2016/06/06 PHP
DOM 基本方法
2009/07/18 Javascript
如何确保JavaScript的执行顺序 之实战篇
2011/03/03 Javascript
javascript实现切换td中的值
2014/12/05 Javascript
JavaScript包装对象使用详解
2015/07/09 Javascript
javascript中html字符串转化为jquery dom对象的方法
2015/08/27 Javascript
JS+CSS实现DIV层的展开、收缩效果
2016/01/28 Javascript
一些实用性较高的js方法
2016/04/19 Javascript
简单实现js拖拽效果
2017/07/25 Javascript
VUE前端cookie简单操作
2017/10/17 Javascript
js 判断一个数字是不是2的n次方幂的实例
2017/11/26 Javascript
写gulp遇到的ES6问题详解
2018/12/03 Javascript
vue 父组件给子组件传值子组件给父组件传值的实例代码
2019/04/15 Javascript
微信小程序云开发 搭建一个管理小程序
2019/05/17 Javascript
Vue实现多标签选择器
2019/11/28 Javascript
解决vue中el-tab-pane切换的问题
2020/07/19 Javascript
[04:10]2016国际邀请赛中国区预选赛第二日TOP10精彩集锦
2016/06/28 DOTA
Python使用xlwt模块操作Excel的方法详解
2018/03/27 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
2019/06/20 Python
Django中Middleware中的函数详解
2019/07/18 Python
使用Python操作ArangoDB的方法步骤
2020/02/02 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
2020/02/09 Python
pandas创建DataFrame的7种方法小结
2020/06/14 Python
详解python日志输出使用配置文件格式
2021/02/10 Python
分享8款纯CSS3实现的搜索框功能
2017/09/14 HTML / CSS
html5 postMessage前端跨域并前端监听的方法示例
2018/11/01 HTML / CSS
Reformation官网:美国女装品牌
2018/09/14 全球购物
Bandier官网:奢侈、时尚前卫的健身服装首选目的地
2020/07/05 全球购物
高中毕业自我鉴定
2013/12/22 职场文书
化验室技术员岗位职责
2013/12/24 职场文书
质量承诺书范文
2014/03/27 职场文书
承诺书格式
2014/06/03 职场文书
政府法律服务方案
2014/06/14 职场文书
广播体操口号
2014/06/18 职场文书
幼儿园六一亲子活动方案
2014/08/26 职场文书
使用Redis实现点赞取消点赞的详细代码
2022/03/20 Redis