这是一道比较有意思的题目,给定一个数字方阵,你只能向右或者向下走,让你寻找从左上角到右下角的一条路径,且让这条路径所经过的数字之和最小。
我将以下面这个方阵为例讲解一些较为关键的算法思路。现在给你如下方阵,如何找出一条数字和最小的路径呢?
最简单粗暴的方法就是把所有的路径找出来,计算每一条路径的值,然后进行比较,找出那条最短路径。但我们不需要这么做,毕竟设计一个遍历所有路径的算法还是挺复杂的。我们知道,最短路径的子路径也一定最短,从这一点出发便可以大大简化我们算法的设计-------我们只需要找出最短的一条子路径,然后沿着最短子路径再寻找其他最短子路径就可以了。
我们可以从第一行开始,很显然,第一行每一条子路径都是最短的,因为只有一条路径,因此我们可以对每条路径进行求和(这里得提醒一下每条路径的起点都是数组的左上角)。同理,第一列也是如此。我们可以将每条路径的值存入一个新的数组中,终点对应的位置存放这条路径的值,如下图所示: