求排列组合数据
2017-06-02 16:23
246 查看
如果一个固定数组 需要出现排列组合,可以采用循环遍历的方法,对所有可能出现的排列组合进行处理。
如果是全排列,是可以算出共多少种组合的,比如1,2,3,4,5,6一共有多少种组合呢?如下图
6*5*4*3*2*1=720种排列组合
那么如何采用程序去把这些组合都书出来呢?
我们可以用6层循环进行处理,当然这是最保守的方法 代码如下
为了防止出现重复,即已经参与排列的数字又被参与后面的排列了,就必须做一个这样的判断。不过这样的代码还是比较冗余的,修改和扩展都不方便。那么如何处理呢?
这里可以封装一个方法来过滤已经使用了的数字
这样一来,不仅降低了循环次数 还减少了判断,能够得到所有的组合
如果是全排列,是可以算出共多少种组合的,比如1,2,3,4,5,6一共有多少种组合呢?如下图
6*5*4*3*2*1=720种排列组合
那么如何采用程序去把这些组合都书出来呢?
我们可以用6层循环进行处理,当然这是最保守的方法 代码如下
<?php $a = array(1,2,3,4,5,6); $b = array(1,2,3,4,5,6); $c = array(1,2,3,4,5,6); $d = array(1,2,3,4,5,6); $e = array(1,2,3,4,5,6); $f = array(1,2,3,4,5,6); foreach($a as $a_vo) { foreach($b as $b_vo) { if($a_vo==$b_vo){continue;} foreach($c as $c_vo) { if($a_vo==$c_vo||$b_vo==$c_vo){continue;} foreach($d as $d_vo) { if($a_vo==$d_vo||$b_vo==$d_vo||$c_vo==$d_vo){continue;} foreach($e as $e_vo) { if($a_vo==$e_vo||$b_vo==$e_vo||$c_vo==$e_vo||$d_vo ==$e_vo){continue;} foreach($f as $f_vo) { if($a_vo==$f_vo||$b_vo==$f_vo||$c_vo==$f_vo||$d_vo ==$f_vo||$e_vo ==$f_vo){continue;} $result[]= $a_vo.$b_vo.$c_vo.$d_vo.$e_vo.$f_vo; } } } } } } ?>
为了防止出现重复,即已经参与排列的数字又被参与后面的排列了,就必须做一个这样的判断。不过这样的代码还是比较冗余的,修改和扩展都不方便。那么如何处理呢?
这里可以封装一个方法来过滤已经使用了的数字
<?php $a = array(1,2,3,4,5,6); function create_array($array,$find) { $b = $array; $search_a=array_search($find,$b); unset($b[$search_a]); return $b; } foreach($a as $a_vo) { $b = create_array($a,$a_vo); foreach($b as $b_vo) { $c = create_array($b,$b_vo); foreach($c as $c_vo) { $d = create_array($c,$c_vo); foreach($d as $d_vo) { $e = create_array($d,$d_vo); foreach($e as $e_vo) { $f = create_array($e,$e_vo); foreach($f as $f_vo) { $result[]= $a_vo.$b_vo.$c_vo.$d_vo.$e_vo.$f_vo; } } } } } } ?>
这样一来,不仅降低了循环次数 还减少了判断,能够得到所有的组合
相关文章推荐
- 【数据结构与算法】二叉查找树形态的排列组合
- 对一组数据做无序排列(组合)的简单实现
- 关于一组数据的排列与组合
- 国家、数据、治理:排列组合文字游戏下的思考(附PPT下载)
- 【数据结构与算法】关于排列组合
- 数据的排列组合二
- 国家、数据、治理:排列组合文字游戏下的思考(附PPT下载)
- 排列组合问题的通用算法
- 一个排列、组合的生成算法
- 终于有个高效率的排列组合算法
- 如何排列数据?
- 显示字符串中所有字符的排列组合。
- 排列组合计算公式
- 高效率的排列组合算法
- 排列、组合及算法
- 显示字符串中所有字符的排列组合。
- 排列组合计算公式
- 顺序求出c(n,r)的排列组合
- [原创]DataList横向排列数据如何实现交替行变色!
- 递归枚举排列、组合的C#源码