当前位置: 首页 > news >正文

动态规划(6.不同路径II)

题目链接:63. 不同路径 II - 力扣(LeetCode)

 

解法:

 本题为不同路径的变型,只不过有些地方有「障碍物」,只要在「状态转移」上稍加修改就可解决。

  • 状态表示:
对于这种Γ路径类」的问题,我们的状态表⽰⼀般有两种形式:
  1. [i, j] 位置出发,巴拉巴拉;
  2. 从起始位置出发,到达 [i, j] 位置,巴拉巴拉。
这⾥选择第⼆种定义状态表示的方式:
dp[i][j] 表示:⾛到 [i, j] 位置处,⼀共有多少种方式。
  • 状态转移:
简单分析⼀下。如果 dp[i][j] 表⽰到达 [i, j] 位置的方法数,那么到达 [i, j] 位置之
前的⼀小步,有两种情况:
  1. [i, j] 位置的上⽅( [i - 1, j] 的位置)向下走一步,转移到 [i, j] 位置;
  2. [i, j] 位置的左⽅( [i, j - 1] 的位置)向右走一步,转移到 [i, j] 位置。
但是, [i - 1, j] [i, j - 1] 位置都是可能有障碍的,此时从上面或者左边是不可能到达 [i, j] 位置的,也就是说,此时的⽅法数应该是 0。
由此我们可以得出⼀个结论,只要这个位置上Γ有障碍物」,那么我们就不需要计算这个位置上的值,直接让它等于 0 即可。
  • 初始化:
可以在最前面加上⼀个Γ辅助结点」,帮助我们初始化。使用这种技巧要注意两个点:
  1. 辅助结点⾥⾯的值要Γ保证后续填表是正确的」;
  2. Γ下标的映射关系」。
在本题中,添加一行,并且添加⼀列后,只需将 dp[1][0] 的位置初始化为 1 即可。
  • 填表顺序:
根据Γ状态转移」的推导,填表的顺序就是Γ从上往下」填每⼀⾏,每⼀⾏Γ从左往右」。
  • 返回值:
根据Γ状态表示」,我们要返回的结果是 dp[m][n]

代码:

C++:

java:

相关文章:

  • Binder机制源码分析
  • 蓝桥杯关于字符串的算法题目(leetcode回文串的判断问题)
  • 【队列】循环顺序队列和链式队列
  • 传感器研习社:臭味传感器(Odorant Sensor)
  • 【论文阅读】Contrastive Clustering Learning for Multi-Behavior Recommendation
  • Java的表达式自动类型提升
  • Netty中的直接内存是怎么回事?
  • 【leetcode hot 100 78】子集
  • companion object和object 从kotlin转java分析
  • lua实现面向对象(封装/继承/多态)
  • AI大白话(三):深度学习——AI的‘大脑‘是如何构建的?
  • 批量将 PPT 转换为PDF/XPS/JPG图片等其它格式
  • 【IROS 2025】CMU提出路径规划器PIPE:机器人探索效率提升14.6%,地图准确率提高9.3%!
  • 《真·出师表》
  • 剑指 Offer II 112. 最长递增路径
  • 51c大模型~合集73
  • 基于ArcGIS和ETOPO-2022 DEM数据分层绘制全球海陆分布
  • C++20 新特性:深入理解 `std::basic_string<char8_t>` 和 `char8_t`
  • QML指示控件:PageIndicator
  • 【重构小程序】基于Tika和Langchain4J进行文件解析和文本切片(二)
  • 痴情与真爱
  • 国家发改委谈稳定外资:将研究制定鼓励外资企业境内再投资政策措施
  • 中国首次当选联合国教科文组织1970年《公约》缔约国大会主席国
  • 被央视曝光“废旧厂区沦为垃圾山”,江西萍乡成立调查组查处
  • 九江银行落地首单畜牧业转型金融业务,助推传统农业绿色智能
  • 看展 | 黄永玉新作展,感受赤子般的生命力