浅谈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脚本的10个技巧(8)
Oct 09 PHP
新手配置 PHP 调试环境(IIS+PHP+MYSQL)
Jan 10 PHP
php2html php生成静态页函数
Dec 08 PHP
PHP将DateTime对象转化为友好时间显示的实现代码
Sep 20 PHP
php使用sql数据库 获取字段问题介绍
Aug 12 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
Jul 19 PHP
php异常处理方法实例汇总
Jun 24 PHP
PHP添加图片水印、压缩、剪切的封装类
Aug 17 PHP
详解PHP数组赋值方法
Nov 07 PHP
PHP中Notice错误常见解决方法
Apr 28 PHP
Laravel框架实现的记录SQL日志功能示例
Jun 19 PHP
PHP7内核之Reference详解
Mar 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
将RTF格式的文件转成HTML并在网页中显示的代码
2006/10/09 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
php解压缩zip和rar压缩包文件的方法
2019/07/10 PHP
纯文字版返回顶端的js代码
2013/08/01 Javascript
JS循环遍历JSON数据的方法
2014/07/08 Javascript
Centos7 中安装 Node.js v4.4.4
2016/11/03 Javascript
Bootstrap 3.x打印预览背景色与文字显示异常的解决
2016/11/06 Javascript
Bootstrap php制作动态分页标签
2016/12/23 Javascript
微信小程序 ecshop地址三级联动实现实例代码
2017/02/28 Javascript
nodejs简单访问及操作mysql数据库的方法示例
2018/03/15 NodeJs
layer.open关闭父窗口 以及调用父页面的方法
2018/08/17 Javascript
浅谈webpack SplitChunksPlugin实用指南
2018/09/17 Javascript
JS实现获取数组中最大值或最小值功能示例
2019/03/02 Javascript
layui按条件隐藏表格列的实例
2019/09/19 Javascript
vue项目出现页面空白的解决方案
2019/10/31 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
跟老齐学Python之编写类之二方法
2014/10/11 Python
python 接口返回的json字符串实例
2018/03/27 Python
python实现爬取图书封面
2018/07/05 Python
对django中render()与render_to_response()的区别详解
2018/10/16 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
2019/08/02 Python
对python中的*args与**kwgs的含义与作用详解
2019/08/28 Python
Python闭包与装饰器原理及实例解析
2020/04/30 Python
使用python-Jenkins批量创建及修改jobs操作
2020/05/12 Python
Python学习之路之pycharm的第一个项目搭建过程
2020/06/18 Python
深入浅析Python代码规范性检测
2020/07/31 Python
求职信格式范本
2013/11/15 职场文书
捐赠仪式主持词
2014/03/19 职场文书
终止或解除劳动合同及劳动关系的证明书
2014/10/06 职场文书
2014年政风行风自查自纠报告
2014/10/21 职场文书
质量整改通知单
2015/04/21 职场文书
美德少年主要事迹材料
2015/11/04 职场文书
优秀大学生申请书
2019/06/24 职场文书
python实战之用emoji表情生成文字
2021/05/08 Python
使用Canvas绘制一个游戏人物属性图
2022/03/25 Javascript