def choose(left_item,index,total):
if(index==total):
yield [left_item]
else:
for picked in range(1,left_item):
for i in choose(left_item-picked,index+1,total):
item=[picked]
item.extend(i)
yield item
choose(100,1,5)
我有这个简单的python代码,它帮我解决了一些组合问题,选择函数会返回一个生成器。但是当我在Java中实现它时,我只能编写这种代码。
public List<int[]> choose(int leftItem, int index, int total) {
List<int[]> l = new ArrayList<>();
if (index == total) {
l.add(new int[]{leftItem});
return l;
}
for (int picked = 1; picked < leftItem; picked++) {
List<int[]> sub = choose(leftItem - picked, index + 1, total);
for (int[] item : sub) {
int[] result = new int[item.length + 1];
result[0] = picked;
System.arraycopy(item, 0, result, 1, item.length);
l.add(a);
}
}
return l;
}
Java版本会在返回之前将所有结果保存到列表中。在我得到结果之前已经有一段时间了。
我怎样才能编写java代码的Generator版本。