Leecode 63

在这里插入图片描述
题目解析:
Leecode 62一样的思路,只是有了障碍物之后,这个位置及其之前的路径都为0,也即此路不通。
路径矩阵(obstacleGrid)第一行第一列在没有障碍物的时候同一初始化为1,有障碍物时障碍物位置及其之后的位置为0
边界条件:如果起始位置有障碍物,则起始位置为0
其他位置判断是否存在障碍物,如果存在那该位置的路径为0,否则就是左边位置路径与上边位置路径的和

class Solution(object):
    def uniquePathsWithObstacles(self, obstacleGrid):
        """
        :type obstacleGrid: List[List[int]]
        :rtype: int
        """
        m, n = len(obstacleGrid), len(obstacleGrid[0])   # 网格行、列
        if m == 1:          # 只有1列,若存在障碍物,则路径为0,否则为1
            if obstacleGrid[0].count(1) == 0:
                return 1
            else:
                return 0    
        if n == 1:          # 只有1行,若存在障碍物,则路径为0,否则为1
            for i in range(m):
                if obstacleGrid[i][0] == 1:
                    return 0
            return 1
        temp = obstacleGrid[0][0]   # 记下起始位置
        flag = 0                    # 标记第一行是否存在障碍物
        for i in range(n):
            if obstacleGrid[0][i] == 1:  # 若存在,则当前位置与其后的位置的路径都为0, 否则为1
                flag = 1
            else:
                obstacleGrid[0][i] = 1
            if flag == 1:
                obstacleGrid[0][i] = 0
        flag = 0                    # 标记第一列是否存在障碍物
        obstacleGrid[0][0] = temp
        for i in range(m):
            if obstacleGrid[i][0] == 1:  # 若存在,则当前位置与其后的位置的路径都为0,否则为1
                flag = 1
            else:
                obstacleGrid[i][0] = 1
            if flag == 1:
                obstacleGrid[i][0] = 0
        for i in range(1, m):       
            for j in range(1, n):   # 其他位置的路径:先判断是否存在障碍物,若有,则该位置路径为0,若没有,则该位置路径为左边路径与上边路径的和
                if obstacleGrid[i][j] == 0:
                    obstacleGrid[i][j] = obstacleGrid[i-1][j] + obstacleGrid[i][j-1]
                else:
                    obstacleGrid[i][j] = 0
        return obstacleGrid[m-1][n-1]   # 返回最终位置的路径
在这里插入代码片
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值