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

【代码随想录_Day32】 62.不同路径 63. 不同路径 II

Day32 OK,今日份的打卡!第三十二天

  • 以下是今日份的总结
    • 不同路径
    • 不同路径 II

以下是今日份的总结

62 不同路径
63 不同路径 II

今天的题目难度不低,掌握技巧了就会很简单,尽量还是写一些简洁代码 ^ _ ^

不同路径

思路:

1.确定dp数组以及下标的含义
------ dp[j]:表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。
2.确定递推公式
------只能有两个方向来推导出来,即dp[i - 1][j] 和 dp[i][j - 1];
------ dp[i - 1][j] 表示,从(0, 0)的位置到(i - 1, j)有几条路径,dp[i][j - 1]同理;
------递推公式:dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
3.dp数组如何初始化
------首先dp[i][0]一定都是1,因为从(0, 0)的位置到(i, 0)的路径只有一条,那么dp[0][j]也同理。
4.确定遍历顺序
------dp[i][j]都是从其上方和左方推导而来,那么从左到右一层一层遍历就可以了。
5.举例推导dp数组

值得注意的是

二维数组便于理解,在写出代码后可以尝试降维

二维数组

    int uniquePaths(int m, int n) {vector<vector<int>> dp(m, vector<int>(n, 0));for (int i = 0; i < m; i++) dp[i][0] = 1;for (int j = 0; j < n; j++) dp[0][j] = 1;for (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {dp[i][j] = dp[i - 1][j] + dp[i][j - 1];}}return dp[m - 1][n - 1];}

一维数组

    int uniquePaths(int m, int n) {vector<int> dp(n);for (int i = 0; i < n; i++) dp[i] = 1;for (int j = 1; j < m; j++) {for (int i = 1; i < n; i++) {dp[i] += dp[i - 1];}}return dp[n - 1];}

不同路径 II

思路:

1.确定dp数组以及下标的含义
------ dp[j]:表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。
2.确定递推公式
------只能有两个方向来推导出来,即dp[i - 1][j] 和 dp[i][j - 1];
------ dp[i - 1][j] 表示,从(0, 0)的位置到(i - 1, j)有几条路径,dp[i][j - 1]同理;
------因为有了障碍,(i, j)如果就是障碍的话应该就保持初始状态(初始状态为0)
------递推公式:dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
3.dp数组如何初始化
------首先dp[i][0]一定都是1,因为从(0, 0)的位置到(i, 0)的路径只有一条,那么dp[0][j]也同理。
4.确定遍历顺序
------dp[i][j]都是从其上方和左方推导而来,那么从左到右一层一层遍历就可以了。
5.举例推导dp数组

值得注意的是

for循环的终止条件,一旦遇到obstacleGrid[i][0] == 1的情况就停止dp[i][0]的赋值1的操作,dp[0][j]同理

二维数组

    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int m = obstacleGrid.size();int n = obstacleGrid[0].size();if (obstacleGrid[m - 1][n - 1] == 1 || obstacleGrid[0][0] == 1) //如果在起点或终点出现了障碍,直接返回0return 0;vector<vector<int>> dp(m, vector<int>(n, 0));for (int i = 0; i < m && obstacleGrid[i][0] == 0; i++) dp[i][0] = 1;for (int j = 0; j < n && obstacleGrid[0][j] == 0; j++) dp[0][j] = 1;for (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {if (obstacleGrid[i][j] == 1) continue;dp[i][j] = dp[i - 1][j] + dp[i][j - 1];}}return dp[m - 1][n - 1];}

一维数组

    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {if (obstacleGrid[0][0] == 1)return 0;vector<int> dp(obstacleGrid[0].size());for (int j = 0; j < dp.size(); ++j)if (obstacleGrid[0][j] == 1)dp[j] = 0;else if (j == 0)dp[j] = 1;elsedp[j] = dp[j-1];for (int i = 1; i < obstacleGrid.size(); ++i)for (int j = 0; j < dp.size(); ++j){if (obstacleGrid[i][j] == 1)dp[j] = 0;else if (j != 0)dp[j] = dp[j] + dp[j-1];}return dp.back();}

写在最后

----OK,今日份的博客就写到这里,这一期的动态规划好难想,明天继续加油!!!
—还没看下期的题,但是我的栈还有一节没写;
–追不上时间进度了!!又欠了半个月的(笑
-吃好,喝好,身体好;玩好,学好,心情好!!。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python习题 102:计算两个日期之间的天数
  • 物联网协议篇(1):modbus tcp和modbusRTU的区别是什么?
  • 改进:利用哈希表加密密码管理系统中的密码,改进密码管理系统
  • 软件技术(游戏软件开发方向)实训室解决方案
  • SQLite库笔记:命令行shell
  • JavaScript基础——JavaScript调用的三种方式
  • 在Windows系统上生成SSH秘钥
  • frp的配置参考
  • Vue前端的安全
  • 无人机环保行业解决方案-应急环境污染处理
  • 简站WordPress主题 专业的WordPress建站服务商
  • 第十九次(安装nginx代理tomcat)
  • RabbitMQ发送者重连、发送者确认
  • 用于自动驾驶的基于立体视觉的语义 3D 对象和自我运动跟踪
  • 区间预测 | 光伏出力的区间预测(Matlab)
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • egg(89)--egg之redis的发布和订阅
  • Fundebug计费标准解释:事件数是如何定义的?
  • Javascript 原型链
  • JavaScript函数式编程(一)
  • Java程序员幽默爆笑锦集
  • Java面向对象及其三大特征
  • JS字符串转数字方法总结
  • JWT究竟是什么呢?
  • Laravel核心解读--Facades
  • mysql_config not found
  • Spring核心 Bean的高级装配
  • SQLServer之索引简介
  • WePY 在小程序性能调优上做出的探究
  • 不上全站https的网站你们就等着被恶心死吧
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 多线程事务回滚
  • 开源SQL-on-Hadoop系统一览
  • 使用 QuickBI 搭建酷炫可视化分析
  • 微信支付JSAPI,实测!终极方案
  • 回归生活:清理微信公众号
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​zookeeper集群配置与启动
  • ​插件化DPI在商用WIFI中的价值
  • ​人工智能书单(数学基础篇)
  • ‌‌雅诗兰黛、‌‌兰蔻等美妆大品牌的营销策略是什么?
  • #1015 : KMP算法
  • #include到底该写在哪
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (1)bark-ml
  • (js)循环条件满足时终止循环
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (差分)胡桃爱原石
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (论文阅读40-45)图像描述1
  • (三)SvelteKit教程:layout 文件
  • (四)linux文件内容查看
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**