【发布时间】:2014-07-31 18:38:47
【问题描述】:
我目前正在努力解决组合问题。作为初始输入,我有一个元组列表列表,换句话说,如下:
List[List[(Char, Int)]]
List(List('k', 2), List('r', 2))
鉴于上面的输入,或者 char 和 int 的任意组合,我应该返回以下内容:
List(List(),List(('k', 1)),List(('k', 2)),List(('r', 1)),List(('k', 1), ('r', 1)),
List(('k', 2), ('r', 1)), List(('r', 2)), List(('k', 1), ('r', 2)),
List(('k', 2), ('r', 2))
)
使用 Scala 的 For 我已将字符和整数隔离到列表中
List(List(), List(1), List(2), List(1, 2))
List(List(), List(k), List(r), List(k, r))
但我被困在如何结合这两个列表来获得上面所有子集的列表。我试过了
lettersets map (i => numsets flatMap (j => i zip j))
但是,这会返回以下不完整且不正确的结果:
List(
List(), List((k,1), (k,2), (k,1)), List((r,1), (r,2), (r,1)),
List((k,1), (k,2), (r,1), (r,2))
)
谁能帮我改进我的方法,或者告诉我为什么这不起作用并提出更好的方法,这样我就可以获得剩余的组合。?(
List(('a', 1), ('b', 2))
List(('a', 2), ('b', 2))
附:输入列表不仅限于两个元素,它应该能够适用于原始列表的所有 N 个元素。最后,我真的不想要解决方案本身,只是建议尝试其他事情或改进我的地图单线地图。
感谢大家的帮助和提示。
【问题讨论】:
-
在我看来构造幂集的算法对你很有用
-
但是请注意 List(List('k', 2), List('r', 2)) 不是 List[List[(Char,Int)]] 它应该是 List (列表(('k',2)),列表(('r',2)))
-
对不起各位忘了说输出的类型是:List[List[(Char, Int)]]
-
这个问题与Functional Programming Principles in Scala,特别是
def combinations中的第6周编程作业极为相似。唯一的区别是您将“a”和“b”替换为“k”和“r”(尽管您忘记了第二个代码块)。 :(