|
@@ -0,0 +1,48 @@
|
|
|
+package main
|
|
|
+
|
|
|
+import "fmt"
|
|
|
+
|
|
|
+func main() {
|
|
|
+ var grid [][]int
|
|
|
+
|
|
|
+ grid = [][]int{
|
|
|
+ {1, 3, 1},
|
|
|
+ {1, 5, 1},
|
|
|
+ {4, 2, 1},
|
|
|
+ }
|
|
|
+ fmt.Println(minPathSum(grid))
|
|
|
+}
|
|
|
+
|
|
|
+func min(a, b int) int {
|
|
|
+ if a < b {
|
|
|
+ return a
|
|
|
+ }
|
|
|
+ return b
|
|
|
+}
|
|
|
+
|
|
|
+func minPathSum(grid [][]int) int {
|
|
|
+ if len(grid) == 0 {
|
|
|
+ return 0
|
|
|
+ }
|
|
|
+ var m, n = len(grid), len(grid[0])
|
|
|
+ var dp = make([][]int, m)
|
|
|
+ for i := 0; i < m; i++ {
|
|
|
+ dp[i] = make([]int, n)
|
|
|
+ }
|
|
|
+ for i := 0; i < m; i++ {
|
|
|
+ for j := 0; j < n; j++ {
|
|
|
+ if i == 0 && j == 0 {
|
|
|
+ dp[i][j] = grid[i][j]
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if i == 0 && j > 0 {
|
|
|
+ dp[i][j] = grid[i][j] + dp[i][j-1]
|
|
|
+ } else if j == 0 && i > 0 {
|
|
|
+ dp[i][j] = grid[i][j] + dp[i-1][j]
|
|
|
+ } else {
|
|
|
+ dp[i][j] = grid[i][j] + min(dp[i-1][j], dp[i][j-1])
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return dp[m-1][n-1]
|
|
|
+}
|