【发布时间】:2017-11-10 19:34:03
【问题描述】:
给定一个带有n 元素{1, 2, 3, ..., n} 的集合,我想声明一个函数,它返回包含具有k 元素数量的集合,例如:
allSubsets 3 2
将返回 [[1;2];[1;3];[2;3]],因为这些是由 1 .. n 创建的集合中具有 2 元素的集合
我已经创建了初始的 create-a-set-part,但我对如何找出其中包含 k 元素的所有子集有点困惑。
let allSubsets n k =
Set.ofList [1..n] |>
更新:
我设法使用 yield 获得了一个可行的解决方案:
let allSubsets n k =
let setN = Set.ofList [1..n]
let rec subsets s =
set [
if Set.count s = k then yield s
for e in s do
yield! subsets (Set.remove e s) ]
subsets setN
allSubsets 3 2
val it : Set<Set<int>> = set [set [1; 2]; set [1; 3]; set [2; 3]]
但不是可以做得更干净一点吗?
【问题讨论】:
标签: f#