有一个MyOption
元素列表:
class MyOption{
List<Integer> listElements;
}
然后我有两个值
allElements
和selectedElements
。第一个是listElements
的大小,第二个是多少个列表项的值为value = 0(其他为null)。我必须获取nottull元素的每个组合的
List<MyOption>
。我知道总有( allElements! / (selectedElements! * (allElements - selectedElements)! )
组合。例如,对于
allElements=3
和selectedElements=1
,有:3!/(1!*(3-1))! = 3
组合(listElements
的大小为3,而List<MyOption>
的大小也为3):0 null null
null 0 null
null null 0
第二个
allElements=4
和selectedElements=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
当我知道
allElements
和selectedElements
时如何获得所有这些? 最佳答案
二项式系数的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);
}
注意:这是一种易于理解的方法,适用于少量输入,实现效率更高。