Leetcode算法——63、不重复路径II(unique paths II)

2023-11-17

一个机器人位于一个m*n的网格的左上角。

它每次只能向下或向右移动一格。它试图到达网格的右下角。

网格中有一些障碍物,机器人不能通过。

求有多少种不重复的路径?

备注:
1、m 和 n 都不大于 100.
2、障碍物和空地分别被标为 1 和 0。

示例:

Input:
[
  [0,0,0],
  [0,1,0],
  [0,0,0]
]
Output: 2
Explanation:
There is one obstacle in the middle of the 3x3 grid above.
There are two ways to reach the bottom-right corner:
1. Right -> Right -> Down -> Down
2. Down -> Down -> Right -> Right

思路

本题与 Leetcode算法——62、不重复路径(unique paths) 很相似,不同之处在于本题多了障碍物,因此不能通过使用数学法转换为纯粹的排列组合问题。

可以使用动态规划法。

设左上角坐标为(0,0),右下角坐标为(m,n)。记走到 (i,j) 的路径数为 dp(i,j),则:
1、如果 (i,j) 位置是障碍物,则 dp(i,j) = 0。
2、如果 (i,j) 位置不是障碍物,则 dp(i,j) = dp(i-1,j) + dp(i,j-1)。

python实现

def uniquePathsWithObstacles(obstacleGrid):
    """
    :type obstacleGrid: List[List[int]]
    :rtype: int
    """
    if not obstacleGrid or obstacleGrid[0][0] == 1:
        return 0
    m = len(obstacleGrid)
    n = len(obstacleGrid[0])
    dp = [[0] * n for _ in range(m)]
    dp[0][0] = 1 # 起始点,一种路径
    for i in range(0, m):
        for j in range(0, n):
            if obstacleGrid[i][j] == 0: # 当前位置没有障碍物
                if i > 0:
                    dp[i][j] += dp[i-1][j]
                if j > 0:
                    dp[i][j] += dp[i][j-1]   
    return dp[-1][-1]
    
if '__main__' == __name__:
    obstacleGrid = [
            [0,0,0],
            [0,1,0],
            [0,0,0]
            ]
    print(uniquePathsWithObstacles(obstacleGrid))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Leetcode算法——63、不重复路径II(unique paths II) 的相关文章

随机推荐

  • 【毕设选题】小红书数据分析与可视化

    文章目录 0 前言 1 课题背景 2 数据库依赖 导入依赖包 3 分析服饰行业笔记数据趋势数据 3 1数据一览 3 2 可视化分析 3 3 可视化分析 4 分析服饰行业内容关键词数据 4 1 数据一览 4 2 可视化分析 5 分析服饰行业品
  • VUE map area coords自适应

  • java异步调用方法

    1 CompletableFuture 使用原生的CompletableFuture实现异步操作 加上对lambda的支持 可以说实现异步任务已经发挥到了极致 Test public void test2 throws Exception
  • 软件测试基础学习

    1 软件和软件测试 1 1 软件 软件组成 程序 数据 文档 软件的分类 按层次划分 系统软件 应用软件 按组织划分 商业软件 开源软件 按结构划分 单机软件 分布式软件 1 2缺陷的由来 软件缺陷的由来 Bug Defect 所有不满足需
  • 使用python写一个可以帮我混淆加密Lua脚本的程序

    首先 我们需要了解一下混淆加密的概念 混淆加密是指将程序代码进行特殊的处理 使其难以被人类理解或反编译 这有助于保护程序的版权和商业机密 对于使用 Python 编写的程序来说 我们可以使用第三方库 pyminifier 来混淆加密 Pyt
  • 【详解】MySQL索引的基本操作,索引(主键索引,普通索引,组合索引,唯一索引)

    索引底层原理 详解 面试必问 MySQL索引底层原理 基于B Tree CodingLJ CSDN博客 前言 索引是什么 索引是一种单独的 物理的对数据库表中一列或多列的值进行排序的一种存储结构 它是某个表中一列或若干列值的集合和相应的指向
  • ASP中Utf-8与Gb2312编码转换乱码问题的解决方法

    asp程序在同一个站点中 如果有utf 8编码的程序 又有gb2312编码的程序时 在浏览utf 8编码的页面后 再浏览当前网站gb2312的页面 gb2312编码的页面就会出现乱码 出现这样的问题是当你浏览utf 8编码的时候 服务器默认
  • C++11多线程(三) lock_guard unique_lock

    文章目录 C 11多线程 三 lock guard unique lock 导读 Lock guard 示例代码 lock guard lt gt 的第二个参数 unique lock unique lock源码浅析 部分 unique l
  • Dart IDEA插件安装及工程创建

    安装插件 开打IDEA 选择 File Settings 选择左侧标签plugins 点击右侧下方的Install JetBrains plugin 在弹出的对话框搜索框中输入dart 等待搜索完成后就会列出Dart插件 选中 点击右侧的I
  • Oracle 高CPU SQL查找

    先top命令 找到PID 再在SQL界面用管理员权限查询 select sql text spid v session program process from v sqlarea v session v process where v s
  • 史上最全的CSS hack方式一览

    http blog csdn net freshlover article details 12132801
  • charge用法

    I mean I can stop charging anytime I want 老友记 第一季 第一集 我的意思是 我可以随时忍住挥霍 及物动词 vt 1 索价 对 索费 课 税 O1 for This store often char
  • socket超时设置 之 ioctlsocket 函数全面解析

    先看看MSDN标准解释 int ioctlsocket SOCKET s long cmd u long FAR argp Parameters s in Descriptor identifying a socket cmd in Com
  • SVN客户端安装及使用

    SVN客户端安装及使用 安装svn客户端 svn常用命令 将指定仓库checkout到当前目录 添加指定文件 添加所有文件 提交文件 更新文件 更新当前目录所有文件 更新指定文件 删除文件 查看修改记录 查看当前目录的修改记录 查看某个文件
  • 车险保单在线OCR识别,字段很全,可以可以

    快瞳科技 车险保单识别 在线测试后发现 保险公司名称 保单号或者合同号 总保费 保险期间 业务类型 车型保单类型 保单名称 被保人信息 被保险人 被保人姓名 被保人证件号码 被保人电话号码 被保人联系地址 车辆信息 车牌 车辆种类 车辆使用
  • 二分查找4 - 搜索旋转排序数组

    搜索旋转数组 1 题目 整数数组 nums 按升序排列 数组中的值 互不相同 在传递给函数之前 nums 在预先未知的某个下标 k 0 lt k lt nums length 上进行了 旋转 使数组变为 nums k nums k 1 nu
  • 秒天秒地!黑马王炸学科,均薪18k+,最高42000元!

    掌握AI的同学 握住了高薪密码 黑马北京校区人工智能开发 16 班的就业炸了 毕业仅 7 个工作日 班级就业率便达到 65 班级均薪高达 18340 9 元 最高薪资更是冲到了 42k 班级就业详情数据 滑动沾高薪喜气 看完这无敌的就业喜报
  • Three.js使用OrbitControls后修改相机旋转方向无效

    1 问题复现 在项目中添加了OrbitControls控制器来控制相机的旋转和平移 但是需要修改初始的相机角度 于是我把相机的角度进行修改 如下 const camera new THREE PerspectiveCamera 75 vie
  • linux nginx 配置

    http blog csdn net Colton Null article details 78439174 locationNum 8 fps 1 之前发布过一篇如何在Tomcat中配置二级域名 现在发现几个月前的我太年轻了 哎 过几个
  • Leetcode算法——63、不重复路径II(unique paths II)

    一个机器人位于一个m n的网格的左上角 它每次只能向下或向右移动一格 它试图到达网格的右下角 网格中有一些障碍物 机器人不能通过 求有多少种不重复的路径 备注 1 m 和 n 都不大于 100 2 障碍物和空地分别被标为 1 和 0 示例