LeetCode 63 [Unique Paths II]

原题

现在考虑网格中有障碍物,那样将会有多少条不同的路径?
网格中的障碍和空位置分别用10来表示。

如下所示在3x3的网格中有一个障碍物:

[
  [0,0,0],
  [0,1,0],
  [0,0,0]
]

一共有2条不同的路径从左上角到右下角。

解题思路

  • 同样是矩阵型动态规划 - Matrix DP
  • 对于有障碍物的地图来说,只需要把障碍物的坐标设为0即可
  • 要注意对第一行和第一列的初始化,如果遇到障碍物第一行后面和第一列下面都是0

完整代码

class Solution(object):
    def uniquePathsWithObstacles(self, obstacleGrid):
        """
        :type obstacleGrid: List[List[int]]
        :rtype: int
        """
        if not obstacleGrid or not obstacleGrid[0]:
            return 0
        m = len(obstacleGrid)
        n = len(obstacleGrid[0])
        cache = [[0 for i in range(n)] for j in range(m)]
        flag1 = flag2 = 1
        for j in range(m): 
            if obstacleGrid[j][0] == 1:
                flag1 = 0
            cache[j][0] = flag1
        for i in range(n):
            if obstacleGrid[0][i] == 1:
                flag2 = 0
            cache[0][i] = flag2
        for j in range(1, m):
            for i in range(1, n):
                cache[j][i] = (cache[j - 1][i] + cache[j][i - 1]) if obstacleGrid[j][i] == 0 else 0
        return cache[m - 1][n - 1]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容