func twoSum(_ nums: [Int], _ target: Int) -> [Int] {
var num1: Int = 0
var num2: Int = 0
for i in nums {
let test1: Int = nums.index(of: i)!
for x in nums {
let test2: Int = nums.index(of: x)!
if (i + x == target && test1 != test2) {
num1 = x
num2 = i
}
}
}
let out1: Int = nums.index(of: num1)!
let out2: Int = nums.index(of: num2)!
let outArray: [Int] = [out1, out2]
return outArray
}
大家好。我试图让上面的代码运行。这是我对LeetCode的Two Sum问题的看法。基本上你给一个阵列和一个"目标"并且代码返回数字的索引,这些数字在添加时等于" target"。
twoSum([2,7,11,15], 9)
twoSum([1,5,2,3,5,10], 15)
到目前为止,这两个示例工作正常,它们分别正确地返回[0, 1]
和[1, 5]
。
但是使用此示例twoSum([3,3], 6)
,我意外地发现nil错误。有谁知道为什么?
提前致谢。
答案 0 :(得分:1)
您应该使用enumerated()
来避免强行展开
(我在代码中做了一些更改):
func twoSum(_ nums: [Int], _ target: Int) -> [Int] {
for (test1, i) in nums.enumerated() {
for (test2, x) in nums.enumerated() {
if (i + x == target && test1 != test2) {
return [test1, test2]
}
}
}
return [0, 0] // but may be you should return nil in this case
}
答案 1 :(得分:0)
由于test1 == test2
未定义num1
或num2
,因此当您强行解包时会导致崩溃nums.index(of: num1)
请改为尝试:
for i in nums {
for x in nums {
if (i + x == target && i != x) {
num1 = x
num2 = i
}
}
}
答案 2 :(得分:0)
nums.index(of:x)不返回最初采用x的索引。它搜索x并返回num的第一个元素的索引,该索引等于x。
你的阵列号是[3,3]。如果搜索nums [0] = 3,则index(of:3)返回0.如果搜索nums [1]也是3,则index(of:3)将再次返回0。它没有返回1.索引搜索数字,它不知道该数字来自何处。