如何在J中实现这段代码

2024-04-23 22:28:21 发布

您现在位置: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代码,它帮助我解决一些组合问题,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代码的生成器版本。你知道吗


Tags: 代码newforindexifresultitemleft