如果我正确理解您的问题,那么您想创建所有 k 元素
具有 n 个元素的给定集合的子集。这可以通过递归来完成
- 将第一个元素
a[1] 与
剩余元素a[2] ... a[n],以及
- 添加
a[2] ... a[n] 的所有 (k) 元素子集。
Swift 代码(有点通用,因此它不仅可以用于整数):
func allSubsetsOf<T>(elements: [T], withCardinality k : UInt,
combinedWith prefix : [T] = [], startingWithIndex j : Int = 0) -> [[T]] {
if k == 0 {
return [prefix]
}
if j < elements.count {
let first = elements[j]
return allSubsetsOf(elements, withCardinality: k-1, combinedWith: prefix + [first], startingWithIndex : j+1)
+ allSubsetsOf(elements, withCardinality: k, combinedWith: prefix, startingWithIndex: j+1)
} else {
return []
}
}
例子:
let result1 = allSubsetsOf([1, 2, 3, 4, 5], withCardinality: 3)
println(result1)
// [[1, 2, 3], [1, 2, 4], [1, 2, 5], [1, 3, 4], [1, 3, 5], [1, 4, 5], [2, 3, 4], [2, 3, 5], [2, 4, 5], [3, 4, 5]]
let result2 = allSubsetsOf(["a", "b", "c", "d"], withCardinality: 2)
println(result2)
// [[a, b], [a, c], [a, d], [b, c], [b, d], [c, d]]