浅谈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代码网站如何防范SQL注入漏洞攻击建议分享
Mar 01 PHP
有关于PHP中常见数据类型的汇总分享
Jan 06 PHP
PHP中设置一个严格30分钟过期Session面试题的4种答案
Jul 30 PHP
php中动态变量用法实例
Jun 10 PHP
php统计数组元素个数的方法
Jul 02 PHP
PHP编写RESTful接口的方法
Feb 21 PHP
PHPCMS V9 添加二级导航的思路详解
Oct 20 PHP
PHP-FPM运行状态的实时查看及监控详解
Nov 18 PHP
Yii框架引入coreseek分页功能示例
Feb 08 PHP
Laravel 5.2 文档 数据库 ―― 起步介绍
Oct 21 PHP
有关PHP 中 config.m4 的探索
Aug 26 PHP
php array_map()函数实例用法
Mar 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
php 批量生成html,txt文件的实现代码
2013/06/26 PHP
php session的应用详细介绍
2017/03/22 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
2019/04/10 PHP
零基础php编程好学吗
2019/10/11 PHP
PHP7 整型处理机制修改
2021/03/09 PHP
EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法
2010/03/31 Javascript
随鼠标上下滚动的jquery代码
2013/12/05 Javascript
js正则表达式中exec用法实例
2015/07/23 Javascript
JavaScript实现网页加载进度条代码超简单
2015/09/21 Javascript
Javascript 计算字符串在localStorage中所占字节数
2015/10/21 Javascript
javascript每日必学之运算符
2016/02/16 Javascript
使用postMesssage()实现iframe跨域页面间的信息传递
2016/03/29 Javascript
JavaScript里 ==与===区别详解
2016/08/16 Javascript
JS简单获取客户端IP地址的方法【调用搜狐接口】
2016/09/05 Javascript
微信小程序 弹窗输入组件的实现解析
2019/08/12 Javascript
Vue 权限控制的两种方法(路由验证)
2019/08/16 Javascript
使用layer模态框给新页面传值的方法
2019/09/27 Javascript
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
2020/01/06 Javascript
封装 axios+promise通用请求函数操作
2020/08/11 Javascript
使用JavaScript实现贪吃蛇游戏
2020/09/29 Javascript
pycharm 使用心得(九)解决No Python interpreter selected的问题
2014/06/06 Python
Python函数式编程指南(四):生成器详解
2015/06/24 Python
python动态加载包的方法小结
2016/04/18 Python
用python找出那些被“标记”的照片
2017/04/20 Python
Python学习小技巧之列表项的推导式与过滤操作
2017/05/20 Python
python matplotlib 注释文本箭头简单代码示例
2018/01/08 Python
Django框架教程之正则表达式URL误区详解
2018/01/28 Python
HTML5 canvas画图并保存成图片的jcanvas插件
2014/01/17 HTML / CSS
《泉水》教学反思
2014/04/11 职场文书
转让协议书范本
2014/04/15 职场文书
投标授权委托书范文
2014/08/02 职场文书
2019年度政务公开考核工作总结模板
2019/11/11 职场文书
Pandas||过滤缺失数据||pd.dropna()函数的用法说明
2021/05/14 Python
vue+iview实现手机号分段输入框
2022/03/25 Vue.js
详解Go语言中Get/Post请求测试
2022/06/01 Golang