赞
踩
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
示例:
- 输入:
- [
- [1,3,1],
- [1,5,1],
- [4,2,1]
- ]
- 输出: 7
- 解释: 因为路径 1→3→1→1→1 的总和最小。
思路:dp
由于只能向右走或向下走
所以当前格子的最小路径等于min(当前格子的上一格的最小路径,当前格子的左一格的最小路径)+当前格子的值
由此我们可以得到一个递推式:
m[ i ] [ j ] = min (m[ i-1 ] [ j ] , m[ j-1 ] [ i ]) + grid[ i ] [ j ]
如上图,我们用m[i][j]来表示第i行第j列的最小路径
那么想知道m[i][j],必须先知道 m[ i-1 ] [ j ] 和 m[ j-1 ] [ i ] 和 grid[ i ] [ j ](grid已知,就是题目给的二维数组对应位置的值)
那么我们只需要建一个和grid一样的二维数组,按照上面递推式按行填表,即可得到所有位置的最小路径,也就得到了我们需要的最后一个位置的最小路径
小技巧,在初
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。