浅谈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 相关文章推荐
PHP4实际应用经验篇(4)
Oct 09 PHP
php 用checkbox一次性删除多条记录的方法
Feb 23 PHP
php设计模式 Mediator (中介者模式)
Jun 26 PHP
php调用nginx的mod_zip模块打包ZIP文件
Jun 11 PHP
使用ThinkPHP+Uploadify实现图片上传功能
Jun 26 PHP
54个提高PHP程序运行效率的方法
Jul 19 PHP
使用PHPCMS搭建wap手机网站
Sep 20 PHP
CodeIgniter针对数据库的连接、配置及使用方法
Mar 03 PHP
PHP实现小偷程序实例
Oct 31 PHP
Thinkphp框架中D方法与M方法的区别
Dec 23 PHP
thinkphp5框架扩展redis类方法示例
May 06 PHP
php连接sftp的作用以及实例代码
Sep 23 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
Laravel中unique和exists验证规则的优化详解
2018/01/28 PHP
php接口实现拖拽排序功能
2018/04/23 PHP
function foo的原型与prototype属性解惑
2010/11/19 Javascript
JS保留两位小数,多位小数的示例代码
2014/01/07 Javascript
通过JS来动态的修改url,实现对url的增删查改
2014/09/01 Javascript
jQuery+AJAX实现遮罩层登录验证界面(附源码)
2020/09/13 Javascript
jquery特效 点击展示与隐藏全文
2015/12/09 Javascript
js运动事件函数详解
2016/10/21 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
2016/12/18 Javascript
vue2.0实战之使用vue-cli搭建项目(2)
2017/03/27 Javascript
Require.JS中的几种define定义方式示例
2017/06/01 Javascript
JS实现前端缓存的方法
2017/09/21 Javascript
vue中rem的配置的方法示例
2018/08/30 Javascript
vue+iview 兼容IE11浏览器的实现方法
2019/01/07 Javascript
vue实现的微信机器人聊天功能案例【附源码下载】
2019/02/18 Javascript
pandas 空的dataframe 插入列名的示例
2018/10/30 Python
让Python脚本暂停执行的几种方法(小结)
2019/07/11 Python
浅析PEP570新语法: 只接受位置参数
2019/10/15 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
pycharm设置默认的UTF-8编码模式的方法详解
2020/06/01 Python
python 利用opencv实现图像网络传输
2020/11/12 Python
Django实现简单的分页功能
2021/02/22 Python
canvas 基础之图像处理的使用
2020/04/10 HTML / CSS
肯尼亚网上商城:Kilimall
2016/08/20 全球购物
荷兰牛仔裤网上商店:Jeans Centre
2018/04/03 全球购物
英国领先的电子、技术和办公用品购物网站:Ebuyer
2018/04/04 全球购物
怎么处理XML的中文问题
2015/03/26 面试题
西安当代医院管理研究院笔试题
2015/12/11 面试题
维德科技C#面试题笔试题
2015/12/09 面试题
自我鉴定的范文
2013/10/03 职场文书
迎八一活动主题
2014/01/31 职场文书
2014年大学生就业规划书
2014/04/04 职场文书
小学教师师德演讲稿
2014/05/06 职场文书
2016年大学迎新晚会工作总结
2015/10/15 职场文书
班主任工作经验交流会总结
2015/11/02 职场文书
Python初识逻辑与if语句及用法大全
2021/08/07 Python