zoukankan      html  css  js  c++  java
  • 求排列组合数据

    如果一个固定数组 需要出现排列组合,可以采用循环遍历的方法,对所有可能出现的排列组合进行处理。

    如果是全排列,是可以算出共多少种组合的,比如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;
                        }
                    }
                }
            }
        }
    }
    ?>

    这样一来,不仅降低了循环次数 还减少了判断,能够得到所有的组合

  • 相关阅读:
    单细胞转录组CNV分析
    瘦子增肌计划 | 健身
    WashU Epigenome Browser | ChIP-seq | DNase-Seq | ATAC-seq | 表观
    羽毛球新手教学
    可变剪切 | isoform | 提取特定exon的usage | DEXSeq
    文献快读 | 单细胞测序肾癌的免疫微环境与临床疗效的关系
    內外全科醫學士課程 | MBBS | 医疗
    天龙八部 | 中国名著 | 刷剧
    当代人工智能的基石 | 数据标注
    提取基因的特定外显子exon的碱基序列 | NCBI
  • 原文地址:https://www.cnblogs.com/lizhaoyao/p/6933930.html
Copyright © 2011-2022 走看看