| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 | 
							- package main
 
- func minimumTotal(triangle [][]int) int {
 
- 	length := len(triangle)
 
- 	if length == 0 {
 
- 		return 0
 
- 	}
 
- 	sum := make([]int, length)
 
- 	sum[0] = triangle[0][0]
 
- 	for i := 1; i < length; i++ { // Something like Dijkstra
 
- 		// sum[] stores all minimum which take diff index as endpoint
 
- 		former := sum[0]
 
- 		sum[0] = former + triangle[i][0]
 
- 		for j := 1; j < i; j++ {
 
- 			tmp := sum[j]
 
- 			if former < tmp {
 
- 				sum[j] = former + triangle[i][j]
 
- 			} else {
 
- 				sum[j] = tmp + triangle[i][j]
 
- 			}
 
- 			former = tmp
 
- 		}
 
- 		sum[i] = former + triangle[i][i]
 
- 	}
 
- 	min := sum[0]
 
- 	for i := 1; i < length; i++ {
 
- 		if sum[i] < min {
 
- 			min = sum[i]
 
- 		}
 
- 	}
 
- 	return min
 
- }
 
- // func main() {
 
- // 	tri1 := [][]int{
 
- // 		{2},
 
- // 		{3, 4},
 
- // 		{6, 5, 7},
 
- // 		{4, 1, 8, 3}}
 
- // 	println(minimumTotal(tri1))
 
- // 	tri2 := [][]int{}
 
- // 	println(minimumTotal(tri2))
 
- // 	tri3 := [][]int{
 
- // 		{9}}
 
- // 	println(minimumTotal(tri3))
 
- // }
 
 
  |