浅谈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
php模块memcache和memcached区别分析
Jun 14 PHP
php全排列递归算法代码
Oct 09 PHP
php curl模拟post请求小实例
Nov 13 PHP
php的mssql数据库连接类实例
Nov 28 PHP
PHP借助phpmailer发送邮件
May 11 PHP
CodeIgniter与PHP5.6的兼容问题
Jul 16 PHP
PHP使用php-resque库配合Redis实现MQ消息队列的教程
Jun 29 PHP
php基于PDO连接MSSQL示例DEMO
Jul 13 PHP
php实用代码片段整理
Nov 12 PHP
微信公众号OAuth2.0网页授权问题浅析
Jan 21 PHP
thinkphp5 redis缓存新增方法实例讲解
Mar 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
屏蔽浏览器缓存另类方法
2006/10/09 PHP
PHP 地址栏信息的获取代码
2009/01/07 PHP
PHP编写RESTful接口的方法
2016/02/21 PHP
Laravel实现短信注册的示例代码
2018/05/29 PHP
Google Map API更新实现用户自定义标注坐标
2009/07/29 Javascript
javascript学习笔记(十七) 检测浏览器插件代码
2012/06/20 Javascript
Javascript 浮点运算精度问题分析与解决
2014/03/26 Javascript
jquery 隐藏与显示tr标签示例代码
2014/06/06 Javascript
jquery实现动态画圆
2014/12/04 Javascript
DOM操作一些常用的属性汇总
2015/03/13 Javascript
Bootstrap多级导航栏(级联导航)的实现代码
2016/03/08 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
2016/11/20 Javascript
JavaScript与JQUERY获取元素的宽、高和位置
2017/02/26 Javascript
详解在vue-cli项目中安装node-sass
2017/06/21 Javascript
简单谈谈原生js的math对象
2017/06/27 Javascript
create-react-app修改为多页面支持的方法
2018/05/17 Javascript
Vue项目使用localStorage+Vuex保存用户登录信息
2019/05/27 Javascript
微信公众号平台接口开发 获取微信服务器IP地址方法解析
2019/08/14 Javascript
如何在 Vue 中使用 JSX
2021/02/14 Vue.js
Python中下划线的使用方法
2015/03/27 Python
python装饰器初探(推荐)
2016/07/21 Python
python分布式环境下的限流器的示例
2017/10/26 Python
Python实现性能自动化测试竟然如此简单
2019/07/30 Python
Keras 使用 Lambda层详解
2020/06/10 Python
兰芝美国网上商城:购买LANEIGE睡眠面膜等
2017/06/30 全球购物
俄罗斯香水在线商店:AromaCode
2019/12/04 全球购物
农村改厕实施方案
2014/03/22 职场文书
海洋科学专业求职信
2014/08/10 职场文书
员工表扬信怎么写
2015/05/05 职场文书
同学聚会致辞集锦
2015/07/28 职场文书
《兰兰过桥》教学反思
2016/02/20 职场文书
mybatis 解决从列名到属性名的自动映射失败问题
2021/06/30 Java/Android
MySql 缓存查询原理与缓存监控和索引监控介绍
2021/07/02 MySQL
JavaScript实现优先级队列
2021/12/06 Javascript
vue配置型表格基于el-table拓展之table-plus组件
2022/04/12 Vue.js
python pygame 开发五子棋双人对弈
2022/05/02 Python