027_最小路径和
知识点:动态规划、状态压缩、利用原有数组
LeetCode第六十四题:https://leetcode-cn.com/problems/minimum-path-sum/solution/
语言:GoLang
// 利用原有的grid,空间复杂度O(1)
func minPathSum(grid [][]int) int {
rowLen := len(grid)
colLen := len(grid[0])
// init
for i := 1;i < rowLen; i++ {
grid[i][0] += grid[i - 1][0]
}
for j := 1; j < colLen; j++ {
grid[0][j] += grid[0][j - 1]
}
// process
for i := 1; i < rowLen; i++ {
for j := 1; j < colLen; j++ {
grid[i][j] += min(grid[i - 1][j], grid[i][j - 1])
}
}
return grid[rowLen - 1][colLen - 1]
}
// 二维dp
func minPathSum_(grid [][]int) int {
rowLen := len(grid)
colLen := len(grid[0])
// init
dp := make([][]int, rowLen)
for i := 0; i < rowLen; i++ {
dp[i] = make([]int, colLen)
}
dp[0][0] = grid[0][0]
for i := 1;i < rowLen; i++ {
dp[i][0] = dp[i - 1][0] + grid[i][0]
}
for j := 1; j < colLen; j++ {
dp[0][j] = dp[0][j - 1] + grid[0][j]
}
// process
for i := 1; i < rowLen; i++ {
for j := 1; j < colLen; j++ {
dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j]
}
}
return dp[rowLen - 1][colLen - 1]
}
func min(a int, b int) int {
if a > b {
return b
}
return a
}

浙公网安备 33010602011771号