PHP实现排列组合

xiaoxiao2021-02-28  90

<?php // 阶乘 function factorial($n){ return array_product(range(1,$n)); } // 排列数 function A($n,$m){ return factorial($n)/factorial($n-$m); } // 组合数 function C($n,$m){ return A($n,$m)/factorial($m); } /** * 排列 * @param array $a * 要排列的数构成的数组 * @param int $m * @return array * 返回所有的排列情况 */ function arrangement($a, $m) { $r = array(); $n = count($a); if ($m <= 0 || $m > $n) { return $r; } for ($i=0; $i<$n; $i++) { $b = $a; $t = array_splice($b, $i, 1); if ($m == 1) { $r[] = $t; } else { $c = arrangement($b, $m-1); foreach ($c as $v) { $r[] = array_merge($t, $v); } } } return $r; } /** * 组合 * @param array $a * 要组合的数构成的数组 * @param int $m * @return array * 返回所有的组合情况 */ function combination($a, $m) { $r = array(); $n = count($a); if ($m <= 0 || $m > $n) { return $r; } for ($i=0; $i<$n; $i++) { $t = array($a[$i]); if ($m == 1) { $r[] = $t; } else { $b = array_slice($a, $i+1); $c = combination($b, $m-1); foreach ($c as $v) { $r[] = array_merge($t, $v); } } } return $r; }
转载请注明原文地址: https://www.6miu.com/read-27331.html

最新回复(0)