我怎么能用Java实现这个代码

时间:2016-05-16 04:02:18

标签: java python

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版本。

0 个答案:

没有答案