n选m的组合的 php实现
原理:http://xiaomage.blog.51cto.com/293990/74094/
function cs($n, $m) {
if ($n == $m) {
return array(array_fill(0, $m, 1));
}
$rs = array();
$arr = array_merge(array_fill(0, $m, 1), array_fill(0, $n - $m, 0));
$rs[] = $arr;
while (true) {
$str = implode('', $arr);
$pos = strpos($str, '10');
if ($pos === false) {
break;
} else {
if ($pos > 1) {
$tmp = array_slice($arr, 0, $pos);
rsort($tmp);
array_splice($arr, 0, $pos, $tmp);
}
$arr[$pos] = 0;
$arr[$pos + 1] = 1;
$rs[] = $arr;
}
}
return $rs;
}
$rs = cs(5, 3);
print_r($rs);
结果
Array
(
[0] => Array
(
[0] => 1
[1] => 1
[2] => 1
[3] => 0
[4] => 0
)
[1] => Array
(
[0] => 1
[1] => 1
[2] => 0
[3] => 1
[4] => 0
)
[2] => Array
(
[0] => 1
[1] => 0
[2] => 1
[3] => 1
[4] => 0
)
[3] => Array
(
[0] => 0
[1] => 1
[2] => 1
[3] => 1
[4] => 0
)
[4] => Array
(
[0] => 1
[1] => 1
[2] => 0
[3] => 0
[4] => 1
)
[5] => Array
(
[0] => 1
[1] => 0
[2] => 1
[3] => 0
[4] => 1
)
[6] => Array
(
[0] => 0
[1] => 1
[2] => 1
[3] => 0
[4] => 1
)
[7] => Array
(
[0] => 1
[1] => 0
[2] => 0
[3] => 1
[4] => 1
)
[8] => Array
(
[0] => 0
[1] => 1
[2] => 0
[3] => 1
[4] => 1
)
[9] => Array
(
[0] => 0
[1] => 0
[2] => 1
[3] => 1
[4] => 1
)
)
本文介绍了如何使用PHP实现n选m的所有组合,不依赖递归方式。通过特定算法原理,可以高效地计算出组合结果。
1659

被折叠的 条评论
为什么被折叠?



