我尝试以leetcode site运行我的代码。在XCode中,此代码编译成功。但是在leetcode中是错误的:
致命错误:无法与上限<下限
形成范围
任务说明:
给定一个由n个整数组成的数组,是否存在以a为单位的元素a,b,c 这样a + b + c = 0?在数组中找到所有唯一的三元组 给出零的总和。
我对此任务的解决方案是:
class Solution {
func threeSum(_ nums: [Int]) -> [[Int]] {
var arr: [[Int]] = []
var fIndex = 0
var sIndex = 1
var tIndex = 2
for i in fIndex..<nums.count-2 {
for n in sIndex..<nums.count-1 {
for z in tIndex..<nums.count {
let sum = nums[i] + nums[n] + nums[z]
if sum == 0 {
arr.append([nums[i], nums[n], nums[z]])
}
}
sIndex += 1
tIndex += 1
}
fIndex += 1
}
return arr
}
}
// delete this in leetcode site
let threeNums = [-1, 0, 1, 2, -1, -4]
let sol = Solution()
print(sol.threeSum(threeNums))
我的代码哪里出问题了?
答案 0 :(得分:1)
假设代码的所有其他部分都起作用,则只需在循环之前检查输入数组是否少于3个元素:
class Solution {
func threeSum(_ nums: [Int]) -> [[Int]] {
var arr: [[Int]] = []
var fIndex = 0
var sIndex = 1
var tIndex = 2
if nums.count < 3 { return [] } // if there is less than 3 elements, there can't be any triplets
for i in fIndex..<nums.count-2 {
...
如果不进行检查,则当nums
仅包含一个元素并且enums.count - 2
为-1
时,您的代码将失败。