浅谈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&amp;&amp;mysql)一
Oct 09 PHP
PHP 存取 MySQL 数据库的一个例子
Oct 09 PHP
第十四节--命名空间
Nov 16 PHP
php面向对象全攻略 (四)构造方法与析构方法
Sep 30 PHP
php Smarty date_format [格式化时间日期]
Mar 15 PHP
通达OA公共代码 php常用检测函数
Dec 14 PHP
利用PHP实现短域名互转
Jul 05 PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
Dec 21 PHP
PHP Smarty模版简单使用方法
Mar 30 PHP
Laravel学习教程之View模块详解
Sep 18 PHP
基于php数组中的索引数组和关联数组详解
Mar 12 PHP
php生成微信红包数组的方法
Sep 05 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中实现Javascript的escape()函数代码
2010/08/08 PHP
php下获取http状态的实现代码
2014/05/09 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
2014/06/26 PHP
javascript下arguments,caller,callee,call,apply示例及理解
2009/12/24 Javascript
基于JS如何实现类似QQ好友头像hover时显示资料卡的效果(推荐)
2016/06/09 Javascript
gulp-uglify 与gulp.watch()配合使用时报错(重复压缩问题)
2016/08/24 Javascript
基于js实现的限制文本框只可以输入数字
2016/12/05 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
2017/02/16 Javascript
JavaScript中三种常见的排序方法
2017/02/24 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
2017/05/26 Javascript
一步步教你利用Canvas对图片进行处理
2017/09/19 Javascript
基于VUE移动音乐WEBAPP跨域请求失败的解决方法
2018/01/16 Javascript
JavaScript中构造函数与原型链之间的关系详解
2019/02/25 Javascript
vue实现todolist功能、todolist组件拆分及todolist的删除功能
2019/04/11 Javascript
[01:00:14]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第三场
2018/04/10 DOTA
[46:37]LGD vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python中实现字符串类型与字典类型相互转换的方法
2014/08/18 Python
Python单链表的简单实现方法
2014/09/23 Python
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
2016/06/03 Python
python算法表示概念扫盲教程
2017/04/13 Python
Linux下python3.6.1环境配置教程
2018/09/26 Python
django 信号调度机制详解
2019/07/19 Python
Python下划线5种含义代码实例解析
2020/07/10 Python
Pytest如何使用skip跳过执行测试
2020/08/13 Python
聊聊python中的异常嵌套
2020/09/01 Python
浅析Python requests 模块
2020/10/09 Python
canvas粒子动画背景的实现示例
2018/09/03 HTML / CSS
施华洛世奇匈牙利官网:SWAROVSKI匈牙利
2019/07/06 全球购物
大三自我鉴定范文
2013/10/05 职场文书
计算机专业个人简短的自我评价
2013/10/23 职场文书
资产经营总监岗位职责范文
2013/12/01 职场文书
工作过失检讨书
2014/02/23 职场文书
党员群众路线剖析材料
2014/10/08 职场文书
2015年学生管理工作总结
2015/05/26 职场文书
离婚律师函范本
2015/05/27 职场文书
使用HttpSessionListener监听器实战
2022/03/17 Java/Android