在另一个问题中,我得到了一个很好的答案,涉及为中国邮递员问题生成某些集合。
提供的答案是:
def get_pairs(s):
if not s: yield []
else:
i = min(s)
for j in s - set([i]):
for r in get_pairs(s - set([i, j])):
yield [(i, j)] + r
for x in get_pairs(set([1,2,3,4,5,6])):
print x
这将输出以下的期望结果:
[(1, 2), (3, 4), (5, 6)]
[(1, 2), (3, 5), (4, 6)]
[(1, 2), (3, 6), (4, 5)]
[(1, 3), (2, 4), (5, 6)]
[(1, 3), (2, 5), (4, 6)]
[(1, 3), (2, 6), (4, 5)]
[(1, 4), (2, 3), (5, 6)]
[(1, 4), (2, 5), (3, 6)]
[(1, 4), (2, 6), (3, 5)]
[(1, 5), (2, 3), (4, 6)]
[(1, 5), (2, 4), (3, 6)]
[(1, 5), (2, 6), (3, 4)]
[(1, 6), (2, 3), (4, 5)]
[(1, 6), (2, 4), (3, 5)]
[(1, 6), (2, 5), (3, 4)]
这确实展示了 Python 的表现力,因为这几乎就是我为算法编写伪代码的方式。我特别喜欢yield的使用以及将集合视为一等公民的方式。
然而,我的问题就在于此。
什么是最好的方法:
1.在Java中复制yield return构造的功能?最好保留一个列表并将我的部分结果附加到该列表中吗?您将如何处理 yield 关键字。
2.Hand 处理套组?我知道我可能会使用其中一个实现 Set 接口的 Java 集合,然后使用 removeAll() 之类的东西来给我一个集合差异。在那种情况下你会这样做吗?
最终,我希望在 Java 中将此方法简化为尽可能简洁和直接的方式。我在想这个方法的java版本的返回类型可能会返回一个int数组列表或类似的东西。
将此方法转换为 Java 时,您将如何处理上述情况?