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

63.不同路径

dp问题描述

62.不同路径
在这里插入图片描述

确定本题的状态表示

dp[i][j]表示的是从最左上角移动到(i,j)位置的路径总数

确定本题的状态转移方程

根据已知条件:dp[1][1]=1
这个题目我们要考虑障碍物,因此下面就(i,j)位置附近有没有障碍物做分类讨论

  1. 如果(i-1,j)处是障碍物,那么dp[i][j]=dp[i][j-1]
  2. 如果(i,j-1)处是障碍物,那么dp[i][j]=dp[i-1][j]
  3. 如果(i-1,j)和(i,j-1)处都没有障碍物,
    则: dp[i][j]=dp[i-1][j]+dp[i][j-1]

当然在实现的时候我们可以对它进行一个优化。是遇到有障碍物的位置,我们就对它不做处理,即到达这个位置的路径为零。然后后面无论(i,j)位置附近有没有障碍物,dp[i][j]都可以根据下面的递推公式来计算dp[i][j]=dp[i-1][j]+dp[i][j-1]

填表求值

根据初始条件和状态转移方程,确定填表顺序,进而逐步填满dp表,最终返回题目要的结果

代码实现

class Solution {
public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int m=obstacleGrid.size();if(m==0) return 0;int n=obstacleGrid[0].size();vector<vector<int>> dp(m+1,vector<int>(n+1,0));if(obstacleGrid[0][0]==0)dp[1][1]=1;cout << m<< " "<< n<<endl;for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){if(i==1&&j==1) continue;if(obstacleGrid[i-1][j-1]==1) continue;dp[i][j]=dp[i-1][j]+dp[i][j-1];}}return dp[m][n];}
};
http://www.lryc.cn/news/623785.html

相关文章:

  • 分治-归并-315.计算右侧小于当前元素的个数-力扣(LeetCode)
  • C++ vector的使用
  • C语言(12)——进阶函数
  • 北京JAVA基础面试30天打卡12
  • 语音转文字,如何提升内容创作效率?
  • 智能汽车领域研发,复用云原始开发范式?
  • WebSocket--精准推送方案(二):实时消息推送-若依项目示例
  • 在职老D渗透日记day19:sqli-labs靶场通关(第26a关)get布尔盲注 过滤or和and基础上又过滤了空格和注释符 ‘)闭合
  • 【架构师从入门到进阶】第五章:DNSCDN网关优化思路——第十一节:网关安全-对称与非对称加密
  • 告别“测试滞后”:AI实时测试工具在敏捷开发中的落地经验
  • 【165页PPT】锂电池行业SAP解决方案(附下载方式)
  • 自动驾驶中的传感器技术34——Lidar(9)
  • 定时器中断点灯
  • 记一次安装OpenStack(Stein)-nova报错问题解决
  • 42 C++ STL模板库11-容器4-forward_list
  • 利用标准IO实现寻找文件中字符出现最多次数
  • Opencv 形态学与梯度运算
  • python的软件工程与项目管理课程组学习系统
  • 【LeetCode题解】LeetCode 33. 搜索旋转排序数组
  • Android studio gradle有关设置
  • 一周学会Matplotlib3 Python 数据可视化-多子图及布局实现
  • java之 junit4单元测试Mockito的使用
  • 魔改chromium源码——解除 iframe 的同源策略
  • 《Nursing Research》(护理SCI)LaTeX模板详细教程:从入门到投稿(一)
  • 深度解析 Spring Bean 生命周期
  • Microsoft WebView2
  • SQL详细语法教程(四)约束和多表查询
  • 网络常识-我的电脑啥时安装了证书
  • 【力扣热题100】双指针—— 接雨水
  • 【AI智能体】Dify 搭建发票识别助手操作实战详解