代码随想录 Day 38 | 【第九章 动态规划part 02】62.不同路径、63. 不同路径 II、343.整数拆分、96.不同的二叉搜索树

LeetCode63不同路径二(动态规划) 算法特点及适用场景该算法基于动态规划思想,针对存在障碍物的网格路径问题进行了合理的状态定义和状态转移方程推导,能够有效地计算出从左上角走到右下角的不同路径数量(考虑障碍物情况)。代码实现上在原 “不同路径” 问题的基础上增加了障碍物的相关判断逻辑,整体依然比较清晰直观,易于理解和维护。适用于各种类似在有障碍的地图、棋盘等场景中进行路径规划或者路径数量统计的问题,只要问题可以抽象成在二维平面上按照特定规则移动并统计路径的情况,都可以尝试运用这种动态规划结合障碍物判断的思路来求解。注意事项及可能遇到的问题。 阅读详情

一、62.不同路径

本题大家掌握动态规划的方法就可以。 数论方法 有点非主流,很难想到。

代码实现

(1)dp数组的含义:dp[i][j]表示从(0, 0)到(i, j)有多少种不同的路径。

(2)递推公式:由于每次只能向下或者向右移动一步,那么到达(i , j)只会有两种状态推到出来,分别是dp[i][j-1]或者dp[i-1][j]。所以递推公式为dp[i][j]=dp[i][j-1]+dp[i-1][j]。

(3)dp数组初始化:由于每次只能向下或者向右移动一步,所以需要初始化最上方和最左方。最上方和最左的dp数组初始化为1,因为只有一种走法就是向右/下走。所以通过for循环,将最上/左方的dp数组dp[0][j]、dp[i][0]全部初始化为1。

(4)遍历顺序:从左往右、从上往下遍历(因为初始值在上方和左方)。

(5)打印dp数组。

class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        dp = [[0] * n for _ in range(m)]
        for i in range(m):
            dp[i][0] = 1
        for j in range(n):
            dp[0][j] = 1
        for i in range(1, m):
            for j in range(1, n):
                dp[i][j] = dp[i-1][j] + dp[i][j-1]
        return dp[m-1][n-1]

 

二、63. 不同路径 II

代码实现

(1)dp数组的含义:dp[i][j]表示从(0, 0)到(i, j)有多少种不同的路径。

(2)递推公式:与不同路径I的区别:如果dp[i][j]是障碍物,本来就走不了,因此在递推公式前加一个条件:if obs[i][j] = 0,没有障碍才可以进行递推公式。

(3)dp数组初始化:初始化最上/左方时,如果遇到障碍,那么障碍物右边全部为0。如果起始/终止位置是障碍物,那么直接返回0。所以在初始化时,判断列/行障碍为0才进行初始化为1,否则遇到障碍为1循环终止,后面的数不进行初始化,因为无法到达。

(4)遍历顺序:从左往右、从上往下遍历(因为初始值在上方和左方)。

(5)打印dp数组。

class Solution:
    def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:
        m = len(obstacleGrid)
        n = len(obstacleGrid[0])
        if obstacleGrid[0][0] == 1 or obstacleGrid[m-1][n-1] == 1:
            return 0
        dp = [[0] * n for _ in range(m)]
        for i in range(m):
            if obstacleGrid[i][0] == 0:
                dp[i][0] = 1
            else:
                break
        for j in range(n):
            if obstacleGrid[0][j] == 0:
                dp[0][j] = 1
            else:
                break
        for i in range(1, m):
            for j in range(1, n):
                if obstacleGrid[i][j] == 0:
                    dp[i][j] = dp[i-1][j]+dp[i][j-1]
        return dp[m-1][n-1]

《最游记》游戏开发全栈指南:从源码解析到实战部署 本文提供了一份详尽的《最游记》游戏源码全栈开发指南。文章深入解析了这款3D玄幻网游的完整源码结构,涵盖客户端、服务端、引擎和工具链,并提供了从环境搭建、核心模块解析到实战修改与部署的完整流程。对于希望深入理解MMORPG架构的开发者而言,这份指南是宝贵的实战资源。 阅读详情

相关推荐

理解ADC:为什么需要抗混叠滤波器?

本文介绍 ADC 的混叠现象,引出抗混叠滤波器,并介绍一种开关电容滤波器,它具有很小的增益过渡带。

疯狂的运放 5940

【动态规划】leetcode 63. 不同路径 II

使用动态规划求得不同路径

lele_ne的博客 708

LLMOps的崛起:如何利用Langfuse和Opik构建高效的模型监控与评估体系

本文探讨了LLMOps的崛起,详细介绍了如何利用Langfuse和Opik构建高效的模型监控与评估体系。通过开源工具Langfuse的全景监控方案和Opik的三层评估体系,帮助AI工程团队实现大语言模型的全生命周期管理,提升模型性能和迭代效率。文章还提供了实战技巧和工具链集成方案,助力企业优化AI应用。

ll5678的博客 680

9.5不同路径②(LC63-M)

从递归公式dp[i][j] = dp[i - 1][j] + dp[i][j - 1] 中可以看出,一定是从左到右一层一层遍历,这样保证推导dp[i][j]的时候,dp[i - 1][j] 和 dp[i][j - 1]一定是有数值。从(0, 0)的位置到(i, 0)的路径只有一条,所以dp[i][0]一定为1,dp[0][j]也同理。这意味着即使在第一列中遇到了障碍物,仍然会继续向下遍历,继续赋值。dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。

m0_50696252的博客 1321

lvds接口_LVDS,接口,时序讲解,非常好的文章

欢迎FPGA工程师加入官方微信技术群点击蓝字关注我们FPGA之家-中国最好最大的FPGA纯工程师社群1.1.1 LVDS接口分类1.1.1.1 单路6bit LVDS这种接口电路中,采用单路方式传输,每个基色信号采用6位数据,共18位RGB数据,因此,也称18位或18bit LVDS接口。此,也称18位或18bit LVDS接口。1.1.1.2 双路6bit LVDS这种接口电...

weixin_39639286的博客 1902

STM32在六轴机械臂实时控制中的选型与分层架构设计

嵌入式实时控制系统中,微控制器的选型直接决定运动控制精度与系统可靠性。其核心在于匹配确定性中断响应、低延迟外设协同与工业协议栈支持等硬性指标。STM32凭借Cortex-M内核的NVIC调度能力、成熟HAL库及CAN FD/高级定时器等专用外设,在机电一体化场景中成为伺服控制中枢的首选。相比ESP32等通用MCU,STM32在硬实时性、EMC认证生态和工业总线兼容性上具备不可替代优势。本文围绕GTB六轴机械臂项目,详解基于STM32F407的硬件抽象层配置、FreeRTOS任务调度、事件队列解耦及闭环控制数

jupi8的博客 755

【力扣】63. 不同路径 II <动态规划>

【力扣】63. 不同路径 II

学习笔记 423

高通camera open代码流程(hal到kernel)

内容:简单介绍Camera open代码调用流程,从HAl到kernel。(api1+hal1) 前言 Android camera api和hal对应关系。安卓在版本更新过程中,camera相关代码也经历了几个版本的更新,表现为camera HAL版本更新(HAL1->HAL2->HAL3),camera API版本更新(camera API1->camera API2),接下...

oxoo123的专栏 4276

【算法题】63. 不同路径 II-力扣(LeetCode)-”如果起点有障碍物,那么便到不了终点“

“如果起点有障碍物,那么便到不了终点 。”

Janium的博客 2258

TIA博途WINCC的触摸屏VB脚本入门指南(嵌入式)

通过编写事件处理程序,您可以响应触摸屏元素的各种事件,并实现自定义的功能。本文将为您提供TIA博途WINCC触摸屏VB脚本的入门指南,帮助您了解基本的脚本编写和嵌入式开发。假设我们有一个名为"Button1"的按钮元素,当用户点击该按钮时,触发相应的事件处理程序,并在触摸屏上显示一条消息。然后回到触摸屏界面编辑器,在按钮元素的属性窗口中找到"按下"事件,并选择刚才创建的脚本文件作为事件处理程序。现在,当用户点击按钮时,触摸屏将执行相应的事件处理程序,并显示一条消息框,内容为"按钮被点击了!

CodeSageX的博客 4418

ANPC三电平拓扑双脉冲试验的原理与实施

ANPC三电平拓扑因损耗低、谐波小、应力均衡而广泛应用,但其存在短、长两类换流通道,寄生电感和开关应力差异显著。短通道尖峰小、可靠性高;长通道应力严苛。因此需分别制定两套独立双脉冲测试方案,针对不同时段和器件(如T1、T5、T6、T4及对应二极管)全面考核开关特性。

嵌入式老牛的博客 350

63. 不同路径 II

leetcode-力扣-63. 不同路径 II

weixin_38853761的博客 720

cartographer运行错误集合

播放bag的时候错误 Check failed: sensor_to_tracking->translation().norm() < 1e-5 The IMU frame must be colocated with the tracking frame. Transforming linear acceleration into the tracking frame will otherwise be imprecise tracking frame不是imu的link 修改lua文件中的.

Studying…… 2020

[LeetCode]不同路径 II

对于矩阵这类的动态规划,玩的比较熟悉了,但是对于一些其他也是动态的解题思路的题,依然有点棘手。。。当然,你在进步,不是吗? 经典的动态规划问题,更多练习 1. 三角形最小路径和 https://blog.csdn.net/fmuma/article/details/80167433 2. 矩阵最小路径和 https://blog.csdn.net/fmuma/article/detail...

二进制的博客 710

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

63.不同路径II

题目 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径? 网格中的障碍物和空位置分别用 1 和 0 来表示。 说明:m 和 n 的值均不超过 100。 示例 1: 输入: [ [0,0,0]...

hanna7 403

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

LeetCode 63 不同路径 II

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径? 网格中的障碍物和空位置分别用1和0来表示。 示例 1: 输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]] 输出:2 解释: 3x3 网格的正中间有一个障碍物。 从左上角到右下角一共有...

麦格芬230的博客 171

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

不同路径(二)

在一的基础上增加了障碍: 思路一样,状态转移方程不变,但是要改变转移的条件。 为了便于计算,障碍物赋值-1 情况一:边界处理 当边界中含有障碍物时,那么障碍物以后的位置都要赋值-1,不可达。 情况二:中间 当不在边界上时,计算经过每一个位置的路径M【i】【j】时,需要注意,当M【i-1】【j】和M【i】【j-1】都不为-1的时,它两的和才赋值给M【i】【j】;只要它两中有一个为-1...

lyj2018gyq的博客 310

114. 不同的路径、115. 不同的路径 II(动态规划)

有一个机器人的位于一个 m × n 个网格左上角。 机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角。 问有多少条不同的路径?     解题思路 这是一道典型的动态规划问题,使用一个二维数组path记忆到达每一点可行的走法总数。首先将左边界点和上边界点初始化为1,因为机器人起始与(0,0),左边界点和上边界点的走法只有1种。接下来的每一点(i,

jyh的博客 898

不同的路径 II

题目描述:"不同的路径" 的跟进问题:现在考虑网格中有障碍物,那样将会有多少条不同的路径?网格中的障碍和空位置分别用 1 和 0 来表示。 样例:如下所示在3x3的网格中有一个障碍物: [   [0,0,0],   [0,1,0],   [0,0,0] ] 上一道“不同的路径”的题目是这道题的背景(详见:点击打开链接),所以我在这里直接进入正题了,如果你不知道上一道题是怎

guoziqing506的博客 1611

Lintcode-动态规划-不同路径二

不同的路径 II "不同的路径" 的跟进问题: 现在考虑网格中有障碍物,那样将会有多少条不同的路径? 网格中的障碍和空位置分别用 1 和 0 来表示。 注意事项 m 和 n 均不超过100 样例 如下所示在3x3的网格中有一个障碍物: [ [0,0,0], [0,1,0], [0,0,0] ] 一共有2条不同的路径从左上角到右下角。

lz1997的博客 317

不同的路径II

"不同的路径" 的跟进问题: 现在考虑网格中有障碍物,那样将会有多少条不同的路径? 网格中的障碍和空位置分别用 1 和 0 来表示。  注意事项 m 和 n 均不超过100 样例 如下所示在3x3的网格中有一个障碍物: [   [0,0,0],   [0,1,0],   [0,0,0] ] 一共有2条不同的路径从左上角到右下角。 import java.util.Sc

wwe4023的博客 464

Leetcode 63:不同路径 II(最详细的解法!!!)

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径? 网格中的障碍物和空位置分别用 1 和 0 来表示。 说明: m 和 n 的值均不超过 100。 示例 1: 输入: [ [0,0,0]...

coordinate的博客 4072

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 218

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 314

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 590
上一篇: 代码随想录 Day 37 | 【第九章 动态规划part 01】理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
下一篇: 代码随想录 Day 39 | 【第九章 动态规划 part 03】01背包问题 二维、01背包问题 一维、416. 分割等和子集
Accept17
博客等级 码龄4年 479粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值