代码随想录算法训练营第三十九天| LeetCode62. 不同路径、LeetCode63. 不同路径 II

news2025/2/3 12:57:06

一、LeetCode62. 不同路径

        1:题目描述(62. 不同路径)

        一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

        机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。

        问总共有多少条不同的路径?

        2:解题思路

class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        # 1:确认dp数组及含义
        # dp数组为二维数组,dp[i][j]表示,当前机器人走到[i][j]的位置有多少种不同的路径
        #:2:确认递推规则
        # 因为机器人每次只能向下或向右移动一步
        # 所以[i][j]的位置,是从[i-1][j]([i][j]上面的位置)的位置向下走一步或[i][j-1]([i][j]左面的位置)的位置向右走一步
        # 因此到达[i][j]的位置,是到达[i-1][j]和[i][j-1]路径的总和
        # dp[i][j] = dp[i-1][j] + dp[i][j-1]
        # 3:初始化
        # 第一行和第一列都需要初始化,因为[i][j]是从上面或者左面的位置过来的,需要知道上面和左面有多少种路径才能计算[i][j]位置有多少种路径
        # 4:遍历顺序,从左到右,从上到下
        dp = [[0 for _ in range(n)] for _ in range(m)]         
        # m表示有多少行,n表示有多少列
        for i in range(m):
            dp[i][0] = 1             # 初始化第一行的每个位置有多少种路径
        for j in range(n):
            dp[0][j] = 1             # 初始化第一列的每个位置有多少种路径
        print(dp)
        for i in range(1, m):        # 从上往下
            for j in range(1, n):    # 从左往右
                dp[i][j] = dp[i-1][j] + dp[i][j-1]     # 递推规则
        # 返回finish位置的路径方法总数
        return dp[m-1][n-1]

二、LeetCode63. 不同路径 II

        1:题目描述(63. 不同路径 II)

        一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

        机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。

        现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?

        网格中的障碍物和空位置分别用 1 和 0 来表示。

        2:解题思路

        跟上面62.不同路径差不多,需要注意以下两个点:

        第一个:递推规则,需要判断当前位置是否有障碍物,有障碍物就不能计算路径总和,没有障碍物才计算路径总和

        第二个:初始化,在第一行和第一列,碰到障碍物后,障碍物及其之后的位置,都不初始化了

class Solution:
    def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:
        # 1:确认dp数组及含义
        # dp数组为二维数组,dp[i][j]表示,当前机器人走到[i][j]的位置有多少种不同的路径
        #:2:确认递推规则
        # 因为机器人每次只能向下或向右移动一步
        # 所以[i][j]的位置,是从[i-1][j]([i][j]上面的位置)的位置向下走一步或[i][j-1]([i][j]左面的位置)的位置向右走一步
        # 因此到达[i][j]的位置,是到达[i-1][j]和[i][j-1]路径的总和
        # dp[i][j] = dp[i-1][j] + dp[i][j-1]
        # 3:初始化
        # 第一行和第一列都需要初始化,因为[i][j]是从上面或者左面的位置过来的,需要知道上面和左面有多少种路径才能计算[i][j]位置有多少种路径,当碰到障碍物,障碍物及后面的位置都不进行初始化了
        # 4:遍历顺序,从左到右,从上到下,当遍历的位置是障碍物时,不计算,继续遍历
        m, n = len(obstacleGrid), len(obstacleGrid[0])
        dp = [[0 for _ in range(n)] for _ in range(m)]          
        # m表示有多少行,n表示有多少列
        dp[0][0] = 1 if obstacleGrid[0][0] != 1 else 0
        if dp[0][0] == 0: return 0  # 如果第一个格子就是障碍,return 0
        for i in range(1,m):
            if obstacleGrid[i][0] == 1:
                break                # 遇到障碍物,直接退出循环,右面的就都不用初始化了
            dp[i][0] = 1             # 初始化第一行在障碍物之前的每个位置有多少种路径
        for j in range(1,n):
            if obstacleGrid[0][j] == 1:
                break                # 遇到障碍物,直接退出循环,右面的就都不用初始化了
            dp[0][j] = 1             # 初始化第一列在障碍物之前的每个位置有多少种路径
        for i in range(1, m):        # 从上往下
            for j in range(1, n):    # 从左往右
                if obstacleGrid[i][j] != 1:     # 当前位置,不是障碍时,计算当前位置有多少种路径
                    dp[i][j] = dp[i-1][j] + dp[i][j-1]     # 递推规则
                # 当前位置是障碍时,不计算当前位置有多少种路径,直接遍历下一个位置
        # 返回finish位置的路径方法总数
        return dp[-1][-1]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/23316.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python 视角下的 6 大程序设计原则

众所周知,python 是面向对象的语言。 但大多数人学习 python 只是为了写出“能够实现某些任务的自动化脚本”,因此,python 更令人熟知的是它脚本语言的身份。 那么,更近一步,如果使用 python 实现并维护一个大的项目…

基于SpringBoot的CSGO赛事管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SpringBoot 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目…

为研发效能而生|一场与 Serverless 的博弈

2022 年 11 月 3 日,第三届云原生编程挑战赛即将迎来终极答辩,18 支战队、32 位云原生开发者入围决赛,精彩即将开启。 云原生编程挑战赛项目组特别策划了《登顶之路》系列选手访谈,期待通过参赛选手的故事,看到更加生…

第1章 计算机系统概述

1.1 操作系统的基本概念 1.1.1 操作系统的概念 操作系统是计算机系统中最基本的系统软件。 操作系统(Operating System,OS)是指控制和管理整个计算机系统的硬件与软件资源,合理地组织、调度计算机的工作与资源的分配,进…

锐捷端口安全实验配置

端口安全分为IPMAC绑定、仅IP绑定、仅MAC绑定 配置端口安全是注意事项 如果设置了IPMAC绑定或者仅IP绑定,该交换机还会动态学习下联用户的MAC地址 如果要让IPMAC绑定或者仅IP绑定的用户生效,需要先让端口安全学习到用户的MAC地址,负责绑定不生…

如何参与一个开源项目!

今天教大家如何给开源项目提交pr,成为一名开源贡献者。pr是 Pull Request 的缩写,当你在github上发现一个不错的开源项目,你可以将其fork到自己的仓库,然后再改动一写代码,再提交上去,如果项目管理员觉得你…

【建议收藏】回收站数据恢复如何操作?3个方案帮你恢复删除的文件

在使用电脑时,我们经常会清理不需要的文件数据。电脑回收站被清空了,但是里面有我们重要的数据,回收站数据恢复如何操作?不如试试下面的3个方案,一起来了解一下回收站数据恢复吧! 一、注册表恢复回收站数据…

电脑视频转换成mp4格式,视频格式转换器转换

怎么把电脑视频转换成mp4格式?使用视频转换器,可以转换来自各种设备的音视频格式,包括相机、手机、视频播放器、电视、平板电脑等。因此,音视频爱好者都可以使用它在各种设备上播放或在社交平台上分享。 主要人群及作用&#xff1…

BHQ-2 NHS,916753-62-3作为各种荧光共振能量转移DNA检测探针中淬灭部分

英文名称:BHQ-2 NHS CAS:916753-62-3 外观:深紫色粉末 分子式:C29H29N7O8 分子量:603.59 储存条件:-20C,在黑暗中 结构式: 凯新生物产品简介: 黑洞猝灭剂-2&#…

pytorch初学笔记(九):神经网络基本结构之卷积层

目录 一、torch.nn.CONV2D 1.1 参数介绍 1.2 stride 和 padding 的可视化 1.3 输入、输出通道数 1.3.1 多通道输入 1.3.2 多通道输出 二、卷积操作练习 2.1 数据集准备 2.2 自定义神经网络 2.3 卷积操作控制台输出结果 2.4 tensorboard可视化 三、完整代码 一、torc…

NestJS 使用体验 | 不如 Spring Boot

本博客站点已全量迁移至 DevDengChao 的博客 https://blog.dengchao.fun , 后续的新内容将优先在自建博客站进行发布, 欢迎大家访问. 文章目录前言正文开发体验运行体验总结相关内容推广前言 公司里近期在尝试部署一些业务到阿里云的函数计算上, 受之前迁移已有的 Spring Boot…

TestStand-调试VI

文章目录调试VI调试VI 在LabVIEW PASS/FAIL TEST步骤中放置一个断点。 ExecuteRun MainSequence。执行在LabVIEW PASS/FAIL处暂停测试步骤。 3.完成以下步骤来调试LabVIEW PASS/FAIL TEST VI步骤。 a.在TestStand的调试工具栏上单击step into(步进)…

System V IPC+消息队列

多进程与多线程 使用有名管道实现双向通信时,由于读管道是阻塞读的,为了不让“读操作”阻塞“写操作”,使用了父子进程来多线操作, 1)父进程这条线:读管道1 2)子进程这条线:写管道2…

【二叉树的顺序结构:堆 堆排序 TopK]

努力提升自己,永远比仰望别人更有意义 目录 1 二叉树的顺序结构 2 堆的概念及结构 3 堆的实现 3.1 堆向下调整算法 3.2 堆向上调整算法 3.3堆的插入 3.4 堆的删除 3.5 堆的代码实现 4 堆的应用 4.1 堆排序 4.2 TOP-K问题 总结: 1 二叉树的顺序结…

分享几招教会你怎么给图片加边框

大家平时分享图片的时候,会不会喜欢给照片加点装饰呢?比如加些边框、文字或者水印之类的。我就喜欢给图片加上一些边框,感觉加了边框的照片像裱在相框中的感觉似的,非常有趣。那么你知道如何给图片加边框吗?不知道的话…

【Nginx】01-什么是Nginx?Nginx技术的功能及其特性介绍

目录1. 介绍1.1 常见服务器的对比1)IIS2)Tomcat3)Apache4)Lighttpd1.2 Nginx的优点(1) 速度更快、并发更高(2) 配置简单、扩展性强(3) 高可靠性(4) 热部署(5) 成本低、BSD许可证2. Nginx常用功能2.1 基本HTTP服务2.2 高级HTTP服务…

华为数通2022年11月 HCIP-Datacom-H12-821 第二章

142.以下关于状态检测防火墙的描述,正确是哪一项? A.状态检测防火墙需要对每个进入防火墙的数据包进行规则匹配 B.因为UDP协议为面向无连接的协议,因此状态检测型防火墙无法对UDP报文进行状态表的匹配 C.状态检测型防火墙只需要对该连接的第一…

性能测试-CPU性能分析,IO密集导致系统负载高

目录 IO密集导致系统负载高 使用top命令-观察服务器资源状态 使用vmstat命令-观察服务器资源状态 使用pidstat命令-观察服务器资源状态 使用iostat命令-观察服务器资源状态 IO密集导致系统负载高 stress-ng -i 10 --hdd 1 --timeout 100-i :有多少个工作者进行&#…

函数的极限:如何通过 δ 和 ϵ 来定义一个连续的函数

连续的定义 维基百科给出的定义: 连续函数(英语:Continuous function)是指函数在数学上的属性为连续。直观上来说,连续的函数就是当输入值的变化足够小的时候,输出的变化也会随之足够小的函数。 所以不要直…

51单总线控制SV-5W语音播报模块

单总线控制SV-5W语音播报模块SV-5W语音播报模块SV-5W语音播报模块简介工作模式说明模块配置接线驱动部分代码效果展示SV-5W语音播报模块 SV-5W语音播报模块简介 DY-SV5W是一款智能语音模块,集成IO分段触发,UART串口控制,ONE_line单总线串口控…