第5天,早起刷题的一天。
今天的题目是Minimum Falling Path Sum
一道典型的动态规划题,动态规划的题目一般都可以分为多步走,一旦执行完一步,走下一步时可以利用之前几步的结果来快速的选择下一步要怎么走。
关键就是要找出怎么利用之前几步的结果。
如这里的,我们要知道走到最后一行的最短路径,那么如果我们已经知道了走到倒数第二行(即上一行)的最短路径,我们就可以很快的算出走到最后一行的最短路径,即:
dp[i][j] = min(dp[i-1][j-1], dp[i][j], dp[i][j+1]) + A[i][j]
然后很顺手的我们可以用两个数组来优化代码的空间复杂度,即把二维数组转成两个一维数组。
因此代码如下: