Arrays 查找其和等于给定和的所有唯一对
我想找到所有的唯一对,它们的和等于给定的和。我实现了一个解决方案,但它只返回找到的第一对Arrays 查找其和等于给定和的所有唯一对,arrays,swift,sorting,Arrays,Swift,Sorting,我想找到所有的唯一对,它们的和等于给定的和。我实现了一个解决方案,但它只返回找到的第一对 func checkPairs(in numbers: [Int], forSum target: Int) -> String { for (i, x) in numbers.enumerated() { for y in numbers[i+1 ..< numbers.count] { if x + y == target {
func checkPairs(in numbers: [Int], forSum target: Int) -> String {
for (i, x) in numbers.enumerated() {
for y in numbers[i+1 ..< numbers.count] {
if x + y == target {
return ("There is a pair that sums \(target): \(x)+\(y)=\(target)")
}
}
}
return "no pair"
}
print (checkPairs(in: [1, 2, 4, 4, 7, 5, 3], forSum: 8))
找到第一对后,通过调用
return
提前退出函数。相反,您应该返回包含对的元组数组,遍历所有对,并将满足要求的元组添加到返回数组中
func checkPairs(in numbers: [Int], forSum target: Int) -> [(Int,Int)] {
var pairs = [(Int,Int)]()
for (i, x) in numbers.enumerated() {
for y in numbers[i+1 ..< numbers.count] {
if x + y == target {
pairs.append((x,y))
}
}
}
return pairs
}
print(checkPairs(in: [1, 2, 4, 4, 7, 5, 3], forSum: 8))
输出:
There is a pair that sums 8: 1+7=8
[(4,4)、(3,5)、(1,7)]
[(4,4)、(3,5)、(1,7)]
这里是你可以做的选择之一
let array = [1, 2, 4, 4, 7, 5, 3]
let target = 8
func checkPairs(in numbers: [Int], forSum target: Int) -> String {
var pairs = ""
for (i, x) in numbers.enumerated() {
for y in numbers[i+1 ..< numbers.count] {
if x + y == target {
pairs += ("There is a pair that sums \(target): \(x)+\(y)=\(target)\n")
}
}
}
return pairs
}
print(checkPairs(in: array, forSum: target))
let array=[1,2,4,4,7,5,3]
让目标=8
func检查对(数字:[Int],用于sum目标:Int)->String{
var pairs=“”
对于(i,x)的数字。枚举(){
对于y,数字为[i+1..<数字.计数]{
如果x+y==目标{
成对+=(“有一对求和\(目标):\(x)+\(y)=\(目标)\n”)
}
}
}
返回对
}
打印(检查对(in:array,forSum:target))
输出将是有一对求和8:1+7=8有一对
求和8:4+4=8有一对求和8:5+3=8
您可以对单个值返回
。相反,使用数组保存所有“有效”的对,在需要时追加一个新对并返回它?@Larme使用while循环打印所有对的和8是否好?您的代码:)返回一个带有该格式的字符串是一个非常糟糕的主意。如果你以后需要它进行进一步的处理,那么解析它是非常困难的,而且由于字符串中有大量重复信息,仅仅读取字符串也是非常糟糕的。也许他想在标签中这样显示它,那么你的标签很难显示,这就是为什么我说这是一个选项之一,取决于他想做什么我们正在寻找唯一的对,那么这对如下数组不起作用:[1,2,4,4,7,5,3,4,1]
@Carpsen90你完全正确,更新了我的答案
let array = [1, 2, 4, 4, 7, 5, 3]
let target = 8
func checkPairs(in numbers: [Int], forSum target: Int) -> String {
var pairs = ""
for (i, x) in numbers.enumerated() {
for y in numbers[i+1 ..< numbers.count] {
if x + y == target {
pairs += ("There is a pair that sums \(target): \(x)+\(y)=\(target)\n")
}
}
}
return pairs
}
print(checkPairs(in: array, forSum: target))