浅谈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调用三种数据库的方法(3)
Oct 09 PHP
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
Jan 29 PHP
php不用正则采集速度探究总结
Mar 24 PHP
phpmyadmin3 安装配置图解教程
Mar 29 PHP
PHP中实现生成静态文件的方法缓解服务器压力
Jan 07 PHP
PHP采用get获取url汉字出现乱码的解决方法
Nov 13 PHP
PHP简单创建压缩图的方法
Aug 24 PHP
smarty模板数学运算示例
Dec 11 PHP
[原创]php使用strpos判断字符串中数字类型子字符串出错的解决方法
Apr 01 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
Apr 20 PHP
微信公众平台开发教程⑥ 微信开发集成类的使用图文详解
Apr 10 PHP
Laravel Eloquent ORM 多条件查询的例子
Oct 10 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 excel类 phpExcel使用方法介绍
2010/08/21 PHP
php设计模式 Command(命令模式)
2011/06/26 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
2017/09/13 PHP
Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
2019/09/30 PHP
利用WebBrowser彻底解决Web打印问题(包括后台打印)
2009/06/22 Javascript
Event altKey,ctrlKey,shiftKey属性解析
2013/12/18 Javascript
web前端开发JQuery常用实例代码片段(50个)
2015/08/28 Javascript
完善的jquery处理机制
2016/02/21 Javascript
js判断某个字符出现的次数的简单实例
2016/06/03 Javascript
Node.js读写文件之批量替换图片的实现方法
2016/09/07 Javascript
jQuery实现联动下拉列表查询框
2017/01/04 Javascript
Javascript中将变量转换为字符串的三种方法
2017/09/19 Javascript
微信小程序使用request网络请求操作实例
2017/12/15 Javascript
react实现antd线上主题动态切换功能
2019/08/12 Javascript
基于JavaScript伪随机正态分布代码实例
2019/11/07 Javascript
通过微信公众平台获取公众号文章的方法示例
2019/12/25 Javascript
vue 百度地图(vue-baidu-map)绘制方向箭头折线实例代码详解
2020/04/28 Javascript
vue过滤器实现日期格式化的案例分析
2020/07/02 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
JS继承实现方法及优缺点详解
2020/09/02 Javascript
[02:37]2018DOTA2亚洲邀请赛赛前采访 VP.no[o]ne心中最强SOLO是谁
2018/04/04 DOTA
python 布尔操作实现代码
2013/03/23 Python
在Mac OS系统上安装Python的Pillow库的教程
2015/11/20 Python
手把手教你python实现SVM算法
2017/12/27 Python
python 实现仿微信聊天时间格式化显示的代码
2020/04/17 Python
在Ubuntu 20.04中安装Pycharm 2020.1的图文教程
2020/04/30 Python
快速一键生成Python爬虫请求头
2021/03/04 Python
舞会礼服和舞会鞋:PromGirl
2019/04/22 全球购物
日常奢侈品,轻松购物:Verishop
2019/08/20 全球购物
业务员岗位职责
2013/11/16 职场文书
大学生实习思想汇报
2014/01/12 职场文书
幼师求职自荐信范文
2014/01/26 职场文书
大学生会计职业生涯规划范文
2014/02/28 职场文书
一次性工伤赔偿协议书范本
2014/11/25 职场文书
Ajax 的初步实现(使用vscode+node.js+express框架)
2021/06/18 Javascript
Python合并pdf文件的工具
2021/07/01 Python