【问题标题】:Swift fatal error: Can't form Range with end < startSwift 致命错误:无法用 end < start 形成 Range
【发布时间】:2016-05-05 07:49:54
【问题描述】:

LeetCode 中 120. 三角(动态规划)

问题:

给定一个三角形,求从上到下的最小路径和。每一步你都可以移动到下一行的相邻数字。

例如,给定以下三角形 [ [2], [3,4], [6,5,7], [4,1,8,3] ] //从上到下的最小路径和为11(即2 + 3 + 5 + 1 = 11)。

//注意:

我总是得到

致命错误:不能用 end 形成 Range

关于“for i in (row-1)...0”。

非常感谢!感谢您的时间!

class Solution
    {
        func minimumTotal(triangle: [[Int]]) -> Int
        {


            if triangle.count == 0
            {
                return 0
            }

            if triangle.count == 1
            {
                return triangle[0][0]
            }


            var arr = [Int](count: triangle.last!.count, repeatedValue: 0)
            let row = triangle.count



            for i in (row-1)...0
            {
                let col = triangle[i].count

                for j in 0...col-1
                {
                    if i == row-1
                    {
                        arr[i] = triangle[i][j]
                        continue
                    }

                    arr[j] = min(arr[j], arr[j+1]) + triangle[i][j]

                }
            }

            return arr[0]
        }

    }


    var test1 = Solution()
    //var input = [[10]]
    //var input = [[1],[2,3]]
    var input = [[-1],[2,3],[1,-1,-3]]
    var result = test1.minimumTotal(input)

    print(result)

【问题讨论】:

    标签: for-loop swift2


    【解决方案1】:
    for in (0...row-1).reverse()
    

    Swift 无法读取第 1 行...0

    【讨论】:

    • 但是当 row == 0 时,这仍然会给出运行时错误:“致命错误:Can't form Range with upperBound
    • 你应该在这种情况下使用:“for i in (0..
    【解决方案2】:

    创建一个起点高于终点的范围是个坏主意:你的代码会编译,但它会在运行时崩溃,所以使用 stride 而不是 range

    for i in (row-1).stride(to: 0, by: 1) {  }
    

    【讨论】:

    • 非常感谢。我应该颠倒顺序。感谢您的帮助!
    猜你喜欢
    • 2017-11-26
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多