欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談PHP的排列組合(如輸入a,b,c 輸出他們的全部組合)

 更新時間:2017年03月14日 08:58:28   投稿:jingxian  
下面小編就為大家?guī)硪黄獪\談PHP的排列組合(如輸入a,b,c 輸出他們的全部組合)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

實(shí)例如下:

<?php
/*分治法——直接選擇
比如說a b c
首先將a之后的字符依次與a進(jìn)行交換
1 b,a,c
2 c,b,a
注意這里少了一個原始數(shù)據(jù) a,b,c。需要把原始數(shù)據(jù)也算如排列中
3 a,b,c

然后把字符移到第二個位置,將第二個位置之后的數(shù)分別與第二個位置的數(shù)進(jìn)行交換
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);//輸出原始數(shù)據(jù)
    echo '</br>';
  } 
  //循環(huán)將初始值與第i個值交換后進(jìn)行組合
  for($i = $begin;$i < $N;$i++){

    $t = $arr[$begin];
    $arr[$begin] = $arr[$i];
    $arr[$i] = $t;

    if($i!==$begin){//i==begin時的數(shù)已經(jīng)輸出過
      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個元素開始,輸出初始序列,為組合的一個序列
當(dāng)在來一個元素時只需將該元素放在該元素之前的元素組的不同的位置即組成了不同的排列
如已有元素組為a,b.新元素為c,把c分別與a,b進(jìn)行交換即可(a,c,b);(c,b,a),在現(xiàn)有的排列上在新增元素
重復(fù)執(zhí)行以上步驟
*/
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時的排列上一次已產(chǎn)生,直接新增元素
  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 輸出他們的全部組合)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論