现在给你输入一个二维数组grid
,其中的元素都是非负整数,现在你站在左上角,只能向右或者向下移动,需要到达右下角。现在请你计算,经过的路径和最小是多少?
函数签名如下:
int minPathSum(int[][] grid);
比如题目举的例子,输入如下的grid
数组:
算法应该返回 7,最小路径和为 7,就是上图黄色的路径。
1.标准的自顶向下动态规划解法
一般来说,让你在二维矩阵中求最优化问题(最大值或者最小值),肯定需要递归 + 备忘录,也就是动态规划技巧。
就拿题目举的例子来说,我给图中的几个格子编个号方便描述:
我们想计算从起点D
到达B
的最小路径和,那你说怎么才能到达B
呢?
题目说了只能向右或者向下走,所以只有从A
或者C
走到B
。
那么算法怎么知道从A
走到B
才能使路径和最小&#x