给定一个由非负整数填充的m x n的二维数组,现在要从二维数组的左上角走到右下角,请找出路径上的所有数字之和最小的路径和。
注意:你每次只能向下或向右移动。
思路:求出每一个位置到达的最小路径,就是左边和上边位置的最小值。初始化就是第一行和第一列各个数字相加即可。
package main
import "math"
/**
*
* @param grid int整型二维数组
* @return int整型
*/
func minPathSum( grid [][]int ) int {
// write code here
lenX := len(grid)
lenY := len(grid[0])
status := make([][]int, lenX)
for i := 0; i < lenX; i++ {
status[i] = make([]int, lenY)
if i == 0 {
status[0][0] = grid[0][0]
} else {
status[i][0] = status[i-1][0] + grid[i][0]
}
}
for i := 1; i < lenY; i++ {
status[0][i] = status[0][i-1] + grid[0][i]
}
for i := 1; i < lenX; i ++ {
for j := 1; j < lenY; j ++ {
status[i][j] = int(math.Min(float64(status[i-1][j] + grid[i][j]), float64(status[i][j-1] + grid[i][j])))
}
}
return status[lenX-1][lenY-1]
}