我的Swift代码获取错误无法用上限<下限形成范围

时间:2019-04-02 08:12:00

标签: swift algorithm

我尝试以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))

我的代码哪里出问题了?

1 个答案:

答案 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时,您的代码将失败。