zoukankan      html  css  js  c++  java
  • [Swift]LeetCode120. 三角形最小路径和 | Triangle

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/9953183.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.

    For example, given the following triangle

    [
         [2],
        [3,4],
       [6,5,7],
      [4,1,8,3]
    ]
    

    The minimum path sum from top to bottom is 11 (i.e., 2 + 3 + 5 + 1 = 11).

    Note:

    Bonus point if you are able to do this using only O(n) extra space, where n is the total number of rows in the triangle.


    给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。

    例如,给定三角形:

    [
         [2],
        [3,4],
       [6,5,7],
      [4,1,8,3]
    ]
    

    自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。

    说明:

    如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。


    12ms

     1 class Solution {
     2     func minimumTotal(_ triangle: [[Int]]) -> Int {
     3         guard triangle.count > 0 && triangle[0].count > 0 else {
     4             return 0
     5         }
     6         let m = triangle.count, n = triangle[0].count
     7         var dp = triangle[m - 1]
     8         
     9         var j = m - 2
    10         while j >= 0 {
    11             let arr = triangle[j]
    12             for i in 0..<arr.count {
    13                 dp[i] = min(dp[i], dp[i + 1]) + arr[i]
    14             }
    15             
    16             j -= 1
    17         }
    18         
    19         return dp[0]
    20     }
    21 }

    16ms

     1 class Solution {
     2     func minimumTotal(_ triangle: [[Int]]) -> Int {
     3         if triangle.count == 1 {
     4             return triangle[0][0]
     5         }
     6         var lastLine = triangle.last!
     7         var sums = Array(repeating: 0, count:triangle.count-1)
     8         for i in stride(from: triangle.count-2, through:0, by:-1) {
     9             for j in 0..<triangle[i].count {
    10                 sums[j] = min(lastLine[j], lastLine[j+1]) + triangle[i][j]
    11             }
    12             lastLine = sums
    13         }
    14         return sums[0]
    15     }
    16 }

    44ms

     1 class Solution {
     2     func minimumTotal(_ triangle: [[Int]]) -> Int {
     3         guard triangle.count > 0 else {
     4             return 0
     5         }
     6         
     7         var dp = triangle.last!
     8         
     9         for i in stride(from: triangle.count - 2, through: 0, by: -1) {
    10             for j in 0...i {
    11                 dp[j] = min(dp[j], dp[j + 1]) + triangle[i][j]
    12             }
    13         }
    14         
    15         return dp[0]
    16     }
    17 }

    96ms

     1 class Solution {
     2     
     3     func minimumTotal(_ triangle: [[Int]]) -> Int {
     4         let m = triangle.count
     5         if m == 0 { return 0 }
     6         if m == 1 { return triangle[0][0] }
     7         var result = triangle //设result[i][j]是到ij的最小路径和
     8         
     9         for i in 1 ..< m {
    10             for j in 0 ... i {
    11                 if j == 0 {
    12                     result[i][j] = triangle[i][j] + result[i - 1][j]    
    13                 } 
    14                 else if j == i {
    15                     result[i][j] = triangle[i][j] + result[i - 1][j - 1]    
    16                 }
    17                 else {
    18                     result[i][j] = triangle[i][j] + min(result[i - 1][j], result[i - 1][j - 1])    
    19                 }
    20             }
    21         }
    22         
    23         
    24         return result[m - 1].min() ?? 0
    25     }
    26 }
  • 相关阅读:
    java.lang.IllegalArgumentException: When allowCredentials is true, allowedOrigins cannot contain the special value "*" since that cannot be set on the "Access-Control-Allow-Origin" response header.
    spring-session-data-redis依赖冲突问题
    centos7启动iptables时报Job for iptables.service failed because the control process exited with error cod
    图片上传后台服务报内存溢出 Out Of Memory Java heap space
    mysql 数据库密码忘记重置 进行远程连接
    打Jar包
    Type interface com.innovationV2.mapper.UserMapper is not known to the MapperRegistry
    关于java基础类型Integer String的clone()
    clion使用clang编译
    token & refresh token 机制总结
  • 原文地址:https://www.cnblogs.com/strengthen/p/9953183.html
Copyright © 2011-2022 走看看