LeetCode 题解:63. 不同路径 II,动态规划(空间 O(n)),JavaScript,详细注释
原题链接:https://leetcode-cn.com/problems/unique-paths-ii/
解题思路:
在网格中的任意一点,都有向右和向下两种路径。同时它也是从上方和左方两个位置走过来的。
那么,任意一点的路径数量,等于从起点走到上方和左方点的数量之和。
第一行和第一列都只有一种路径,就是从起点一直走到底。
我们可以用一个二维数组,画出网格中每个点的路径数量,一直递推到终点,终点存储的就是所有的路径数量。
因此动态规划的状态转移方程为:
dp[i][j]=dp[i-1][j]+dp[i][j-1]
。如果遇到障碍物,则该位置的路径数量为 0。
对于起始点
obstacleGrid[0][0]
,如果它没有障碍物,路径为 1,反之为 0。由于每个点的路径数量只和它左方和上方有关,因此状态转移方程可以优化为:
dp[i] = dp[i - 1] + dp[i]
。
复制代码
版权声明: 本文为 InfoQ 作者【Lee Chen】的原创文章。
原文链接:【http://xie.infoq.cn/article/438e54776229143f7ebb3ea95】。文章转载请联系作者。
评论