有一个MyOption元素列表:

class MyOption{
   List<Integer> listElements;
}

然后我有两个值allElementsselectedElements。第一个是listElements的大小,第二个是多少个列表项的值为value = 0(其他为null)。
我必须获取nottull元素的每个组合的List<MyOption>。我知道总有
( allElements! / (selectedElements! * (allElements - selectedElements)! )组合。

例如,对于allElements=3selectedElements=1,有:3!/(1!*(3-1))! = 3组合(listElements的大小为3,而List<MyOption>的大小也为3):
0      null   null
null     0    null
null   null    0

第二个allElements=4selectedElements=2示例,有6种组合:
0      0     null  null
0     null    0    null
0     null   null   0
null   0      0    null
null   0     null   0
null  null    0     0

当我知道allElementsselectedElements时如何获得所有这些?

最佳答案

二项式系数的recursive definition可以解决您的问题:

public static long choose(long allElements, long selectedElements){
    if(allElements < selectedElements)
        return 0;
    if(selectedElements == 0 || selectedElements == allElements)
        return 1;
    return choose(allElements-1,selectedElements-1)+choose(allElements-1,selectedElements);
}

注意:这是一种易于理解的方法,适用于少量输入,实现效率更高。

07-24 09:18