120.go 907 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package main
  2. func minimumTotal(triangle [][]int) int {
  3. length := len(triangle)
  4. if length == 0 {
  5. return 0
  6. }
  7. sum := make([]int, length)
  8. sum[0] = triangle[0][0]
  9. for i := 1; i < length; i++ { // Something like Dijkstra
  10. // sum[] stores all minimum which take diff index as endpoint
  11. former := sum[0]
  12. sum[0] = former + triangle[i][0]
  13. for j := 1; j < i; j++ {
  14. tmp := sum[j]
  15. if former < tmp {
  16. sum[j] = former + triangle[i][j]
  17. } else {
  18. sum[j] = tmp + triangle[i][j]
  19. }
  20. former = tmp
  21. }
  22. sum[i] = former + triangle[i][i]
  23. }
  24. min := sum[0]
  25. for i := 1; i < length; i++ {
  26. if sum[i] < min {
  27. min = sum[i]
  28. }
  29. }
  30. return min
  31. }
  32. // func main() {
  33. // tri1 := [][]int{
  34. // {2},
  35. // {3, 4},
  36. // {6, 5, 7},
  37. // {4, 1, 8, 3}}
  38. // println(minimumTotal(tri1))
  39. // tri2 := [][]int{}
  40. // println(minimumTotal(tri2))
  41. // tri3 := [][]int{
  42. // {9}}
  43. // println(minimumTotal(tri3))
  44. // }