java - 总和为 A 的 N 个整数的不同组数

标签 java math combinatorics

我想计算 N 个整数的不同有序组的个数,使每个组的元素总和为 A

例如:如果 N = 3 且 A = 3,则结果应为 10:
1 = [3, 0, 0]
2 = [2, 1, 0]
3 = [1, 2, 0]
4 = [0, 3, 0]
5 = [2, 0, 1]
6 = [1, 1, 1]
7 = [0, 2, 1]
8 = [1, 0, 2]
9 = [0, 1, 2]
10 = [0, 0, 3]

我的做法是暴力破解:

public static int calc(int a, int n){
    if (n <= 1 || a == 0) return 1;

    int sum = 0;
    for (int i=0; i<=n; i++)
        sum += calc(a - i, n - 1);

    return sum;
}

我怀疑可能有更好的方法(我缺少一些数学计算..) 有吗?

编辑 在原来的问题中我忘了考虑顺序

最佳答案

这是将 A 组合成 N 个部分(包括零个部分)的组合。对 (A, N) 的成分数等于 C(A + N - 1, A),其中 C() 是组合数,即二项式系数。见同一个公式herehere

关于java - 总和为 A 的 N 个整数的不同组数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12857344/

相关文章:

java - java应用程序中的全局Catch子句

Java Applet 图形大小调整

javascript - 在一定范围内转换度数

objective-c - 增加 NSNumber

r - 在R中,如何获得某些向量值的所有可能组合?

java - 使用用户定义的类在列表中添加值

java - FrameworkUtil.getBundle 总是返回 NULL

algorithm - 内存受限的硬币可更改多达 10 亿的数字

java - 文件输入流空指针异常

.net - 生成 IEnumerable(Of T) 元素的所有唯一组合