【发布时间】:2016-03-17 06:15:01
【问题描述】:
我有以下 Python 函数来递归查找集合的所有分区:
def partitions(set_):
if not set_:
yield []
return
for i in xrange(2**len(set_)/2):
parts = [set(), set()]
for item in set_:
parts[i&1].add(item)
i >>= 1
for b in partitions(parts[1]):
yield [parts[0]]+b
for p in partitions(["a", "b", "c", "d"]):
print(p)
谁能帮我把它翻译成Java?这是我目前所拥有的:
private static List<List<List<String>>> partitions(List<String> inputSet) {
List<List<List<String>>> res = Lists.newArrayList();
if (inputSet.size() == 0) {
List<List<String>> empty = Lists.newArrayList();
res.add(empty);
return res;
}
int limit = (int)(Math.pow(2, inputSet.size())/2);
for (int i = 0; i<limit; i++) {
List<List<String>> parts = Lists.newArrayList();
List<String> part1 = Lists.newArrayList();
List<String> part2 = Lists.newArrayList();
parts.add(part1);
parts.add(part2);
for (String item: inputSet) {
parts.get(i&1).add(item);
i >>= 1;
}
for (List<List<String>> b: partitions(parts.get(1))) {
List<List<String>> set = Lists.newArrayList();
set.add(parts.get(0));
set.addAll(b);
res.add(set);
}
}
return res;
}
当使用多个元素执行它时,我得到一个无限递归。
【问题讨论】:
-
您真的想将输出作为列表列表的列表吗?我认为包含所有超集元素的单个列表可能更容易理解和编码。