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代码,它帮助我解决一些组合问题,choose函数将返回一个生成器。但当我用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代码的生成器版本。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐