凑个热闹,贡献个 Scala 的一行版本:
def fullCombination[A](in: List[A]): List[List[A]] = in.foldLeft(List(List.empty[A])) { (acc, x) => acc ++ acc.map(x :: _) }.collect { case xs if xs.nonEmpty => xs.reverse }
// 测试
scala> fullCombination(List('a', 'b', 'c', 'd')).map(_.mkString).mkString(", ")
val res5: String = a, b, ab, c, ac, bc, abc, d, ad, bd, abd, cd, acd, bcd, abcd
scala> fullCombination(List(1,2,3))
val res6: List[List[Int]] = List(List(1), List(2), List(1, 2), List(3), List(1, 3), List(2, 3), List(1, 2, 3))
【 在 iStudy 的大作中提到: 】
: 标 题: 这种组合算法怎么写?
: 发信站: 水木社区 (Tue May 28 19:10:33 2024), 站内
:
: a,b,c,d四个对象
:
: 我要生成a,b,c,d的全组合===C(4,1)+C(4,2)+C(4,3)+C(4,4)
:
: 结果就是输出 {a,b,c,d, ab,ac,ad,bc,bd,cd,abc,abd,acd,bcd,abcd}
:
: 这种算法很常见,java有类似的库吗?
:
: --
:
: ※ 修改:·iStudy 于 May 28 19:15:08 2024 修改本文·[FROM: 58.37.127.*]
: ※ 来源:·水木社区 mysmth.net·[FROM: 58.37.127.*]
--
修改:iStudy FROM 58.37.127.*
FROM 14.112.12.*