golang力扣leetcode 120.三角形最小路径和

简介: golang力扣leetcode 120.三角形最小路径和

120.三角形最小路径和

120.三角形最小路径和

题解

典型的动态规划问题,题解看注释即可

代码

package main
func minimumTotal1(triangle [][]int) int { //自顶向下
  dp := make([][]int, len(triangle))
  for i := 0; i < len(triangle); i++ {
    dp[i] = make([]int, len(triangle[i]))
    copy(dp[i], triangle[i])
  }
  for i := 1; i < len(triangle); i++ {
    for j := 0; j < len(triangle[i]); j++ {
      if j == 0 { //这一层的第一个数字,只会是上一层的第一个数字
        dp[i][j] = dp[i-1][j] + triangle[i][j]
      } else if j > len(triangle[i-1])-1 { //这一层的最后一个数字,只会是上一层的最后一个数字
        dp[i][j] = dp[i-1][j-1] + triangle[i][j]
      } else { //中间的数字有2种走法
        dp[i][j] = min(dp[i-1][j], dp[i-1][j-1]) + triangle[i][j]
      }
    }
  }
  result := dp[len(triangle)-2][0]
  for i := 1; i < len(dp[len(triangle)-2]); i++ {
    result = min(result, dp[len(triangle)-2][i])
  }
  return result
}
func minimumTotal2(triangle [][]int) int { //自下而上
  dp := make([][]int, len(triangle))
  for i := 0; i < len(triangle); i++ {
    dp[i] = make([]int, len(triangle[i]))
    copy(dp[i], triangle[i])
  }
  for i := len(triangle) - 2; i >= 0; i-- {
    for j := 0; j < len(triangle[i]); j++ {
      dp[i][j] = min(dp[i+1][j], dp[i+1][j+1]) + triangle[i][j]
    }
  }
  return dp[0][0]
}
func min(a, b int) int {
  if a > b {
    return b
  }
  return a
}
目录
相关文章
|
3月前
【LeetCode 35】112.路径总和
【LeetCode 35】112.路径总和
31 0
|
3月前
【LeetCode 36】113.路径总和II
【LeetCode 36】113.路径总和II
34 0
|
3月前
【LeetCode 34】257.二叉树的所有路径
【LeetCode 34】257.二叉树的所有路径
25 0
|
5月前
|
存储 算法 Linux
LeetCode第71题简化路径
文章讲述了LeetCode第71题"简化路径"的解题方法,利用栈的数据结构特性来处理路径中的"."和"..",实现路径的简化。
LeetCode第71题简化路径
|
5月前
|
算法
LeetCode第64题最小路径和
LeetCode第64题"最小路径和"的解题方法,运用动态规划思想,通过构建一个dp数组来记录到达每个点的最小路径和,从而高效求解。
LeetCode第64题最小路径和
|
5月前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
60 6
|
5月前
|
算法 JavaScript Python
【Leetcode刷题Python】79. 单词搜索和剑指 Offer 12. 矩阵中的路径
Leetcode第79题"单词搜索"的Python解决方案,使用回溯算法在给定的二维字符网格中搜索单词,判断单词是否存在于网格中。
59 4
|
5月前
|
存储 Python
【Leetcode刷题Python】滑雪路径消耗时间:Testing Round #16 (Unrated) C. Skier
Leetcode题目"Testing Round #16 (Unrated) C. Skier"的Python解决方案,题目要求计算给定滑雪路径字符串的总耗时,其中未走过的边耗时5秒,走过的边耗时1秒。
60 4
|
5月前
|
存储 Python
【Leetcode刷题Python】1496.判断路径是否相交
Leetcode第1496题"判断路径是否相交"的Python代码实现,通过使用字典存储方向和集合记录访问过的坐标点来检测路径是否与自身相交。
53 2