浅谈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 静态变量与自定义常量的使用方法
Jan 26 PHP
通过具体程序来理解PHP里面的抽象类
Jan 28 PHP
php数组函数序列之in_array() - 查找数组中是否存在指定值
Nov 07 PHP
PHP内核探索:变量存储与类型使用说明
Jan 30 PHP
PHP实现微信公众平台音乐点播
Mar 20 PHP
CodeIgniter框架过滤HTML危险代码
Jun 12 PHP
php面向对象中static静态属性和静态方法的调用
Feb 08 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
Jan 19 PHP
PHP实现适用于文件内容操作的分页类
Jun 15 PHP
php compact 通过变量创建数组
Nov 15 PHP
PHP面向对象之事务脚本模式(详解)
Jun 07 PHP
PHP查找一列有序数组是否包含某值的方法
Feb 07 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的人气开发框架Laravel
2015/10/15 PHP
PHP MySql增删改查的简单实例
2016/06/21 PHP
php结合mysql与mysqli扩展处理事务的方法
2016/06/29 PHP
PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)
2016/09/11 PHP
ECMAScript 基础知识
2007/06/29 Javascript
禁止你的左键复制实用技巧
2013/01/04 Javascript
nodejs中操作mysql数据库示例
2014/12/20 NodeJs
javascript简单实现跟随滚动条漂浮的返回顶部按钮效果
2016/08/19 Javascript
vue使用element-ui的el-input监听不了回车事件的解决方法
2018/01/12 Javascript
详解vue移动端日期选择组件
2018/02/22 Javascript
JS使用Date对象实时显示当前系统时间简单示例
2018/08/23 Javascript
jQuery实现点击旋转,再点击恢复初始状态动画效果示例
2018/12/11 jQuery
实现elementUI表单的全局验证的方法步骤
2019/04/29 Javascript
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
2019/08/12 Javascript
vue项目中使用eslint+prettier规范与检查代码的方法
2020/01/16 Javascript
python使用os模块的os.walk遍历文件夹示例
2014/01/27 Python
python基础教程之Filter使用方法
2017/01/17 Python
详解python 字符串和日期之间转换 StringAndDate
2017/05/04 Python
Windows平台Python连接sqlite3数据库的方法分析
2017/07/12 Python
python+opencv像素的加减和加权操作的实现
2019/07/14 Python
Python collections中的双向队列deque简单介绍详解
2019/11/04 Python
pytorch 计算Parameter和FLOP的操作
2021/03/04 Python
CSS3弹性伸缩布局之box布局
2016/07/12 HTML / CSS
详解纯CSS3制作的20种loading动效
2017/07/05 HTML / CSS
Fenty Beauty官网:蕾哈娜创立的美妆品牌
2021/01/07 全球购物
会计工作心得体会
2014/01/13 职场文书
纺织工程专业个人求职信范文
2014/01/27 职场文书
保险公司年会主持词
2014/03/22 职场文书
护理专业求职信
2014/06/15 职场文书
《中国梦我的梦》中学生演讲稿
2014/08/20 职场文书
小学生国庆65周年演讲稿范文(2篇)
2014/09/21 职场文书
送达通知书
2015/04/25 职场文书
导游词之南京中山陵
2019/11/27 职场文书
详解缓存穿透击穿雪崩解决方案
2021/05/28 Redis
Python实现PIL图像处理库绘制国际象棋棋盘
2021/07/16 Python
python中redis包操作数据库的教程
2022/04/19 Python