Heim >Backend-Entwicklung >PHP-Tutorial >一个排列组合算法有关问题 抛砖引玉一上

一个排列组合算法有关问题 抛砖引玉一上

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-13 11:08:121033Durchsuche

一个排列组合算法问题 抛砖引玉一下
中学时候都学过 排列组合 1 2 3 4 5 6可以组成720个不同的字符串
这里写了一个粗糙的实现方法 例为 1- 6
希望哪个高手可以指点一二 
$j=0;
for($i=123456;$i$box=array();

$ge =$i%10;
if($ge>6 || $ge==0){
continue;
}
$box[]=$ge;
$shi = intval($i/10)%10;
if($shi>6 || $shi ==0){
continue;
}
$box[]=$shi;
$bai = intval($i/100)%10;
if($bai>6 || $bai ==0){
continue;
}
$box[]=$bai;
$qian = intval($i/1000)%10;
if($qian>6 || $qian ==0){
continue;
}
$box[]=$qian;
$wan = intval($i/10000)%10;
if($wan>6 || $wan ==0){
continue;
}
$box[]=$wan;
$shiwan = intval($i/100000);
if($shiwan>6 || $shiwan ==0){
continue;
}
$box[]=$shiwan;
//echo count(array_unique($box));
//echo '
';
//var_dump(array_unique($box));
//echo '
';
if(count(array_unique($box))!=6){
continue;
}

if($j%10==0){
echo "
";
}
$j++;
echo ' ',$i,' ';
}
echo "
";
echo "一共{$j}个";
------解决方案--------------------

$a = perm(array(1,2,3,4,5,6));<br />echo count($a);<br />//print_r($a);<br /><br />function perm($list, $k=0, $m=0) {     <br />  if(! $m) $m = count($list) - 1; <br />  $r = array();    <br />  if($k >= $m) {          <br />    $r[] = join('', $list);         <br />  }else {         <br />    for($i = $k; $i <= $m; $i++) {             <br />      list($list[$k], $list[$i]) = array($list[$i], $list[$k]);<br />      $r = array_merge($r, perm($list, $k + 1, $m));             <br />      list($list[$k], $list[$i]) = array($list[$i], $list[$k]);<br />    }<br />  }<br />  return $r;<br />}

720

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn