浅谈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 相关文章推荐
ftp类(myftp.php)
Oct 09 PHP
ip签名探针
Oct 09 PHP
php 友好URL的实现(吐血推荐)
Oct 04 PHP
PHP 函数执行效率的小比较
Oct 17 PHP
Thinkphp+smarty+uploadify实现无刷新上传
Jul 30 PHP
PHP获取页面执行时间的方法(推荐)
Dec 10 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
Mar 15 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
Feb 15 PHP
PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】
May 13 PHP
laravel Validator ajax返回错误信息的方法
Sep 29 PHP
PHP Swoole异步MySQL客户端实现方法示例
Oct 24 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
Aug 03 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数据库开发知多少
2006/10/09 PHP
ajax php传递和接收变量实现思路及代码
2012/12/19 PHP
php使用正则过滤js脚本代码实例
2014/05/10 PHP
Laravel框架路由配置总结、设置技巧大全
2014/09/03 PHP
PHP+mysql+ajax轻量级聊天室实现方法详解
2016/10/17 PHP
cakephp常见知识点汇总
2017/02/24 PHP
Laravel如何友好的修改.env配置文件详解
2017/06/07 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
用于自动添加Digg This!按钮的JavaScript
2006/12/23 Javascript
jquery.Jwin.js 基于jquery的弹出层插件代码
2012/05/23 Javascript
利用毫秒减值计算时长的js代码
2013/09/22 Javascript
JS冒泡事件的快速解决方法
2013/12/16 Javascript
javascript遇到html5的一些表单属性
2015/07/05 Javascript
jQuery实现下拉框选择图片功能实例
2015/08/08 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
javascript基础知识分享之类与函数化
2016/02/13 Javascript
JavaScript用200行代码制作打飞机小游戏实例
2017/06/21 Javascript
Vue 2.0的数据依赖实现原理代码简析
2017/07/10 Javascript
JS获取字符对应的ASCII码实例
2017/09/10 Javascript
详解在vue-cli中使用路由
2017/09/25 Javascript
Angular Renderer (渲染器)的具体使用
2018/05/03 Javascript
js利用递归与promise 按顺序请求数据的方法
2019/08/30 Javascript
JavaScript代码异常监控实现过程详解
2020/02/17 Javascript
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
2020/07/28 Javascript
python 根据pid杀死相应进程的方法
2017/01/16 Python
Python 实现删除某路径下文件及文件夹的实例讲解
2018/04/24 Python
详解python的变量缓存机制
2021/01/24 Python
用CSS3绘制三角形的简单方法
2015/07/17 HTML / CSS
家得宝官网:The Home Depot(全球最大的家居装饰专业零售商)
2018/12/17 全球购物
Made in Design英国:设计家具、照明、家庭装饰和花园家具
2019/09/24 全球购物
新驾驶员个人自我评价
2014/01/03 职场文书
硕士研究生求职自荐信范文
2014/03/11 职场文书
内乡县衙导游词
2015/02/05 职场文书
Html5大屏数据可视化开发的实现
2021/06/11 HTML / CSS
十大经典日本动漫排行榜 海贼王第三,犬夜叉仅第八
2022/03/18 日漫
实战Python爬虫爬取酷我音乐
2022/04/11 Python