首页 > 解决方案 > 我的 Swift 代码出现错误 Can't form range with upperbound < lowerbound

问题描述

我尝试在 leetcode站点中运行我的代码。在 XCode 中,此代码编译成功。但在 leetcode 中是错误的:

致命错误:无法形成上限 < 下限的范围

任务描述:

给定一个由 n 个整数组成的数组 nums,在 nums 中是否存在元素 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))

我的代码中的问题在哪里?

标签: swiftalgorithm

解决方案


假设您的代码的所有其他部分都有效,您只需要在循环之前检查输入数组的元素是否少于 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.


推荐阅读