gpt4 book ai didi

arrays - 查找给定范围内的数字数组的所有生成值

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:54:36 26 4
gpt4 key购买 nike

想象一下这个场景:

输入
数字数组和输出的边界范围:

数字 = [20, 50]
范围 = [0, 200]


输出
限制在边界范围内的输入数组元素之和的所有可能组合:

输出 = [20, 40, 50, 70, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200]

所以我的问题是我怎样才能做到这一点?

最佳答案

给定一个 Int(s) 数组和一个闭区间

let numbers = [20, 50]
let range: ClosedRange = 0...200

以下函数返回满足以下条件的每个可能整数的 Set:

  1. 在范围内
  2. 可以表示为 numbers 中某些值的总和(如果需要可重复)

代码

func combs(range:ClosedRange<Int>, numers: [Int], value: Int = 0) -> Set<Int> {

guard value <= range.upperBound else { return [] }

return numbers.reduce(Set<Int>()) { results, num -> Set<Int> in
var results = results
let newValue = value + num
if range ~= value {
results.insert(value)
}
return results.union(combs(range: range, numers: numbers, value: newValue))
}
}

用法

let nums = Array(combs(range: range, numers: numbers)).sorted()

[0, 20, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200]

关于arrays - 查找给定范围内的数字数组的所有生成值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40514124/

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