这道题是LeeCode第64题,和之前的第62题一样,属于动态规划中的中等难度题目。
题目
解题思路
本题的解题思路和之前的第62题很相似,定义dp[i][j]为从第(i, j)点走到右下角的最短路径,则有dp[i][j] = dp[i+1][j] + dp[i][j+1].
然后我们来考虑边界条件,此题的边际和第62题的边际一样,不同的是边界上面dp值,当在下边界的时候dp[m-1][j] = sum(gird[m-1][j:-1]), 在左边界的时候
dp[i][n-1] = sum(grid[i:-1][n-1]), dp[m-1][n-1] = grid[m-1][n-1].
最终答案为: dp[0][0]
实现代码
1 | class Solution: |
感想
一开始声明二维数组的时候用了浅拷贝,改变某一行的值的时候,其他行的值也会跟着改变,但是我这么搞,竟然通过了60多个样例,好像是在第63个样例的时候卡住了(挠头),后面一个个的把dp里面的值打印出来看,才发现原来是用了浅拷贝,导致这样的问题,换成了迭代生成式后,终于AC了。