原题
https://leetcode.cn/problems/triangle/description/
思路
动态规划
复杂度
时间:O(n2)
空间:O(n2)
Python代码
class Solution:
def minimumTotal(self, triangle: List[List[int]]) -> int:
dp = triangle[:]
for i in range(1, len(triangle)):
for j in range(len(triangle[i])):
if j == 0:
dp[i][j] = dp[i - 1][j] + dp[i][j]
elif j == len(triangle[i])-1:
dp[i][j] = dp[i - 1][j-1] + dp[i][j]
else:
dp[i][j] = min(dp[i-1][j-1], dp[i-1][j]) + dp[i][j]
return min(dp[-1])
Go代码
func minimumTotal(triangle [][]int) int {
// 将triangle复制给dp
dp := make([][]int, len(triangle))
for i := 0; i < len(dp); 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] + dp[i][j]
} else if j == len(triangle[i])-1 {
dp[i][j] = dp[i-1][j-1] + dp[i][j]
} else {
dp[i][j] = min(dp[i-1][j-1], dp[i-1][j]) + dp[i][j]
}
}
}
sort.Ints(dp[len(dp)-1])
return dp[len(dp)-1][0]
}
1081

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



