gpt4 book ai didi

swift - 如何在 Swift 中从 n 元素数组生成所有可能的 k 元素数组

转载 作者:行者123 更新时间:2023-11-28 13:20:54 27 4
gpt4 key购买 nike

我想从n-element 数组创建所有 可能的k-element 数组。 k 可能大于或小于 n。输出数组中的元素不必是唯一的。

例如:

给定这个数组

let a = [1,2]

给定所需大小 3 的函数应返回:

[1,1,1]
[2,1,1]
[1,2,1]
[1,1,2]
[2,2,1]
[2,1,2]
[1,2,2]
[2,2,2]

示例 2

给定这个数组

let b = [[0,1], [2,3]]

给定所需大小 3 的函数应返回:

[[0,1], [0,1], [0,1]]
[[2,3], [0,1], [0,1]]
[[0,1], [2,3], [0,1]]
[[0,1], [0,1], [2,3]]
[[2,3], [2,3], [0,1]]
[[2,3], [0,1], [2,3]]
[[0,1], [2,3], [2,3]]
[[2,3], [2,3], [2,3]]

如何在 Swift 中做到这一点?

最佳答案

因此,您希望所有 k 元组都包含给定集合中的元素。这可以递归地完成通过将集合中的所有元素作为第一个元组元素并将其组合所有 (k-1) 个元组:

func allTupelsFrom<T>(elements: [T], withLength k : UInt,
combinedWith prefix : [T] = []) -> [[T]] {

if k == 0 {
return [prefix]
}

var result : [[T]] = []
for e in elements {
result += allTupelsFrom(elements, withLength: k-1, combinedWith: prefix + [e])
}
return result
}

例子:

let result1 = allTupelsFrom([1, 2], withLength: 3)
println(result1)
// [[1, 1, 1], [1, 1, 2], [1, 2, 1], [1, 2, 2], [2, 1, 1], [2, 1, 2], [2, 2, 1], [2, 2, 2]]

let result2 = allTupelsFrom(["a", "b", "c", "d"], withLength: 4)
println(result2)
// [[a, a, a, a], [a, a, a, b], ... , [d, d, d, c], [d, d, d, d]]

关于swift - 如何在 Swift 中从 n 元素数组生成所有可能的 k 元素数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25897809/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com