https://leetcode.cn/problems/triangle/?envType=study-plan-v2&envId
func minimumTotal(triangle [][]int) int {
// 从下到上dp, dp[i][j]代表以三角形第i行第j个元素为终点的最小路径和
dp := make([][]int, len(triangle))
for i := 0; i < len(triangle); i++ {
dp[i] = make([]int, len(triangle[i]))
}
bigNum := 1 << 31 // 假设一个很大的数
for i := 0; i < len(triangle); i++ {
for j := 0; j < len(triangle[i]); j++ {
if i == len(triangle) - 1 {
// 最后一行直接赋值
dp[i][j] = triangle[i][j]
} else {
dp[i][j] = bigNum // 初始化为一个很大的数
}
}
}
for i := len(triangle) - 2; i >= 0; i-- {
for j := 0; j < len(triangle[i]); j++ {
// dp[i][j] = triangle[i][j] + min(dp[i + 1][j], dp[i + 1][j + 1])
dp[i][j] = triangle[i][j] + min(dp[i + 1][j], dp[i + 1][j + 1])
}
}
return dp[0][0] // 返回三角形顶点的最小路径和
}
1126

被折叠的 条评论
为什么被折叠?



