Home  >  Article  >  Backend Development  >  寻找一个算法.

寻找一个算法.

WBOY
WBOYOriginal
2016-06-06 20:42:361032browse

现在有一个数组如下:

<code>$a = [1,2,3,4,5,6,7,8,9]
</code>

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

<code>$b = [1,2]
$b = [1,3]
$b = [1,4]
$b = [1,5]
</code>

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

回复内容:

现在有一个数组如下:

<code>$a = [1,2,3,4,5,6,7,8,9]
</code>

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

<code>$b = [1,2]
$b = [1,3]
$b = [1,4]
$b = [1,5]
</code>

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

<code>$a = [1,2,3,4,5,6,7,8,9];
// 需要分片的大小
$perSize = 2;

$leader = array_shift($a);
$bs = array_chunk($a, $perSize - 1);
$bs = array_map(function ($item) use ($leader) {
    array_unshift($item, $leader);
    return $item;
}, $bs);
// 所有的 $b, 和 $b 的个数
var_dump($bs, count($bs));
</code>

http://blog.sina.cn/dpool/blog/s/blog_4dfb08c901011wut.html?vt=4

<code>#include <stdio.h>

int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int array2[9];
int array2len = 0;

void perm(int len, int index)
{
    int i, j;
    if (array2len </stdio.h></code>

我的思路是用递归,代码如上,C语言的。

对了,要统计的话,有两个思路:一个是在上面的代码中加一些逻辑,在每次需要输出array2的时候统计;另一个是用组合数的计算公式直接计算,比如题中9个数字生成的所有组合共有502个,高中数学讲过。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn