在 Swift Array Extension 中组合元素和数组时出错 - 在 Xcode 中有效,但在 LeetCode 中无效

Error combining an element and an array in Swift Array Extension - Works in Xcode but not in LeetCode

提问人:Kang 提问时间:8/15/2023 最后编辑:Dávid PásztorKang 更新时间:8/15/2023 访问量:29

问:

我一直在尝试在 Swift 的 Array 扩展中实现一个函数,该函数返回数组的所有排列。当我在 Xcode 中运行此代码时,它似乎工作得很好。但是,当我在 LeetCode 中尝试相同的代码时,我遇到了以下错误:

Line 10: Char 24: error: cannot convert value of type 'Array<Element>' to closure result type 'Element'
[tar]  +  ac

这是我的代码片段:

extension Array  {
    func permute() -> [[ Element ]] {
        guard !isEmpty else { return [[]] }

        return (0...count-1).flatMap { i in
            var dup = self
            let tar = dup.remove(at: i)

            return dup.permute().map { ac in
                [tar]  +  ac
            }
        }
    }
}

导致问题的行是 [tar] + ac。我很困惑,因为 Xcode 和 LeetCode 之间的行为不一致。我怎样才能解决这个问题,以便它在两个平台上都能工作?

我尝试过: 我在 Swift 中实现了一个 Array 扩展来生成数组的所有排列。我采取的方法是递归分解问题,删除每个元素并获得其余元素的排列。然后,我会将删除的元素与这些排列组合在一起。

预期成果: 我希望我的 permute() 函数返回输入数组的所有可能排列。在 Xcode 中测试时,它提供了正确的结果,每个排列都是一个单独的数组。

实际结果: 当我将代码传输到 LeetCode 并尝试运行它时,我在 [tar] + ac 行上遇到了编译时错误。错误指出:

这很令人惊讶,因为 Xcode 中没有这样的问题。

快速 关闭

评论

0赞 Joakim Danielson 8/15/2023
如果您为每个关闭提供完整的签名,也许会有所帮助。您错过了在倒数第二段中包含错误消息

答:

2赞 Dávid Pásztor 8/15/2023 #1

似乎 Leetcode 使用的是旧版本的 Swift,可能是 Swift 5.6,因为该错误在 Swiftfiddle 上也可以使用 5.6 编译器重现。

您只需要键入注释闭包的返回值,您的代码也可以使用 Swift 5.6 进行编译。看看这个 Swiftfiddle 游乐场。在 Swift 5.7 及更高版本中不需要执行此操作的原因是 SE-0326,它是在 Swift 5.7 中实现的,并启用了多语句闭包返回类型推理。

extension Array  {
    func permute() -> [[ Element ]] {
        guard !isEmpty else { return [[]] }

        return (0...count-1).flatMap { i -> [[Element]] in
            var dup = self
            let tar = dup.remove(at: i)

            return dup.permute().map { ac -> [Element] in
                [tar]  +  ac
            }
        }
    }
}