寻找一个数组重组的算法.

龙上 发布于 2014/10/08 19:29
阅读 430
收藏 0
PHP

现在有一个数组如下:

$a = [1,2,3,4,5,6,7,8,9]

现在要通过上面的数据元素重新生成长度为2,3,4...的新数组,并且统计一共组成了新数组的个数.
比如生成长度为2的数字,并且统计$b个数 例:

$b = [1,2] $b = [1,3] $b = [1,4] $b = [1,5]

现在使用的一个比较笨的方法就是使用循环.长度为2就使用2个循环,3个就用3个循环.这样代码不利于维护.如果有10个,那么要10个循环.

加载中
0
雨翔河
雨翔河
怎么越看越觉得你要搞排列组合。抱歉没看懂问题的描述。。。
0
星爷
星爷
既然只是统计个数 那就是排列组合计算的问题了  跟数组有啥关系 把值算出来不就行了
龙上
龙上
包括组合出来的也要用
0
f
fingerboy
<?php
$array = array(1,2,3,4,5,6,7,8,9);
echo reform($array,5);
//组合数公式: Cmn = Pmn / Pmm = n(n-1)(n-2)...(n-m+1)/m! = n!/m!/(n-m)!
function reform($array=null,$length=0){
	if(!$length || !$array) return 0;
	if(count($array) < $length) return 0;
	$total = count($array);
	$n = $m = 1;
	for($s=0;$s<$length;++$s){
		$n = $n * ($total-$s);
		$m = $m * ($s+1);
	}
	$i = $n/$m;
	return $i;
}




返回顶部
顶部