版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/scylhy/article/details/83537447
64. 最小路径和(minimum-path-sum)
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得
路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
示例:
输入:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
输出: 7
解释: 因为路径 1→3→1→1→1 的总和最小。
-
分析
经典的简单的学习动态规划的题目,因为是求路径和且只能向右和向下 , 所以第一行和第一列上的每个位置的最小路径和是确定的;sum(i,j)上的 最小路径和,则是min{sum(i-1,j),sum(i,j-1)}+grid(i,j)。 由此可得递推公式:
- code
package main import "fmt" func minPathSum(grid [][]int) int { if len(grid)==0{ return 0 } //初始化第一行 for i:=1;i<len(grid[0]);i++ { grid[0][i]+=grid[0][i-1] } //初始化第一列 for i:=1;i<len(grid);i++{ grid[i][0]+=grid[i-1][0] } for i:=1;i<len(grid);i++{ for j:=1;j<len(grid[0]);j++{ if grid[i-1][j]<grid[i][j-1]{ grid[i][j]+=grid[i-1][j] }else{ grid[i][j]+=grid[i][j-1] } } } return grid[len(grid)-1][len(grid[0])-1] } func main(){ fmt.Println(minPathSum([][]int{{1,3,1},{1,5,1},{4,2,1}})) fmt.Println(minPathSum([][]int{})) }