-
浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)
- /*分治法――直接选择
- 比如说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
- **/
- functionzuhe($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''
- }
- //循环将初始值与第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''
- }
- 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),在现有的排列上在新增元素
- 重复执行以上步骤
- */
- functionzuhe2($arr,$begin){
- if($begin==0) {
- print_r($arr);
- echo"";
- //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"";
- zuhe2($arr,$begin+1);
- $t=$arr[$begin];
- $arr[$begin] =$arr[$i];
- $arr[$i] =$t; //phpfensi.com
- }
- }
出处:http://www.phpfensi.com/php/20180809/11068.html
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式