فهرست منبع

add 'Minimum Path Sum'

tangs 5 سال پیش
والد
کامیت
48270ba795
1فایلهای تغییر یافته به همراه48 افزوده شده و 0 حذف شده
  1. 48 0
      tags/dynamic-programming/minimumPathSum/main.go

+ 48 - 0
tags/dynamic-programming/minimumPathSum/main.go

@@ -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]
+}