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

代码随想录算法训练营第36期DAY42

DAY42

62不同路径

AC了,舒服!待会看看优质解答。

  1. class Solution {
  2. public:
  3.     int uniquePaths(int m, int n) {
  4.         vector<vector<int>> dp(m,vector<int>(n,1));
  5.         for(int i=0;i<m;i++){
  6.             for(int j=0;j<n;j++){
  7.                 if(i!=0&&j!=0){
  8.                     dp[i][j]=dp[i][j-1]+dp[i-1][j];
  9.                 }
  10.             }
  11.         }
  12.         return dp[m-1][n-1];
  13.     }
  14. };

代码随想录题解:

  1. 图论深搜法:将路径化为到叶子的路。输出叶子结点的数量。这里主要学习深搜写法和思想:
  1. class Solution {
  2. public:
  3.     int dfs(int i,int j, int m,int n){
  4.         if(i>m||j>n) return 0;
  5.         if(i==m&&j==n) return 1;
  6.         return dfs(i+1,j,m,n)+dfs(i,j+1,m,n); 
  7.     }
  8.     int uniquePaths(int m, int n) {
  9.         return dfs(1,1,m,n);
  10.     }
  11. };

  1. 动态规划与自己写的一致
  2. 数论方法:

这里学习计算组合问题的模版,针对组合数C:

  1. class Solution {
  2. public:
  3.     //数论方法
  4.     int uniquePaths(int m, int n) {
  5.         long long fenzi=1;
  6.         int fenmu=m-1;
  7.         int count=m-1;
  8.         int fenzistart=m+n-2;
  9.         while(count--){
  10.             fenzi*=(fenzistart--);
  11.             while(fenmu!=0&&fenzi%fenmu==0){
  12.                 fenzi/=fenmu;
  13.                 fenmu--;
  14.             }
  15.         }
  16.         return fenzi;
  17.     }
  18. };

附上做的笔记:

DAY42

62不同路径

AC了,舒服!待会看看优质解答。

  1. class Solution {
  2. public:
  3.     int uniquePaths(int m, int n) {
  4.         vector<vector<int>> dp(m,vector<int>(n,1));
  5.         for(int i=0;i<m;i++){
  6.             for(int j=0;j<n;j++){
  7.                 if(i!=0&&j!=0){
  8.                     dp[i][j]=dp[i][j-1]+dp[i-1][j];
  9.                 }
  10.             }
  11.         }
  12.         return dp[m-1][n-1];
  13.     }
  14. };

代码随想录题解:

  1. 图论深搜法:将路径化为到叶子的路。输出叶子结点的数量。这里主要学习深搜写法和思想:
  1. class Solution {
  2. public:
  3.     int dfs(int i,int j, int m,int n){
  4.         if(i>m||j>n) return 0;
  5.         if(i==m&&j==n) return 1;
  6.         return dfs(i+1,j,m,n)+dfs(i,j+1,m,n); 
  7.     }
  8.     int uniquePaths(int m, int n) {
  9.         return dfs(1,1,m,n);
  10.     }
  11. };

  1. 动态规划与自己写的一致
  2. 数论方法:

这里学习计算组合问题的模版,针对组合数C:

  1. class Solution {
  2. public:
  3.     //数论方法
  4.     int uniquePaths(int m, int n) {
  5.         long long fenzi=1;
  6.         int fenmu=m-1;
  7.         int count=m-1;
  8.         int fenzistart=m+n-2;
  9.         while(count--){
  10.             fenzi*=(fenzistart--);
  11.             while(fenmu!=0&&fenzi%fenmu==0){
  12.                 fenzi/=fenmu;
  13.                 fenmu--;
  14.             }
  15.         }
  16.         return fenzi;
  17.     }
  18. };

附上做的笔记:

63不同路径ii

想对了,但是还差一点点:思维、手写模拟(别懒)、语法(多练多写多想)

不会做,卡在状态转移了:如果左边和上面都是0,显然是走不过来的,该怎么表示呢?

“有障碍的话,其实就是标记对应的dp table(dp数组)保持初始值(0)就可以了”这一点倒是做到了。

手写模拟,多画图!初始化:x轴和y轴,障碍物之后的格子都是0了。写for一旦obstacle就退出循环了,那么其他的就是保持初始值0. 还有:如果ob为1,那么就continue 不去计算它的dp(能保持加0)

写一遍:

  1. class Solution {
  2. public:
  3.     int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
  4.         vector<vector<int>> dp(obstacleGrid.size(),vector<int>(obstacleGrid[0].size(),0));
  5.         //起点/终点有障碍 0;
  6.         if(obstacleGrid[0][0]==1||obstacleGrid[obstacleGrid.size()-1][obstacleGrid[0].size()-1]==1return 0;
  7.         for(int i=0;i<obstacleGrid.size()&&obstacleGrid[i][0]!=1;i++) dp[i][0]=1;
  8.         for(int i=0;i<obstacleGrid[0].size()&&obstacleGrid[0][i]!=1;i++) dp[0][i]=1;
  9.         for(int i=1;i<obstacleGrid.size();i++){
  10.             for(int j=1;j<obstacleGrid[0].size();j++){
  11.                 if(obstacleGrid[i][j]==1continue;
  12.                 dp[i][j]=dp[i-1][j]+dp[i][j-1];
  13.             }
  14.         }
  15.         return dp[obstacleGrid.size()-1][obstacleGrid[0].size()-1];
  16.     }
  17. };

细节:从1开始循环。

相关文章:

  • 深入解析:Element Plus 与 Vite、Nuxt、Laravel 的结合使用
  • 【Linux】centos7下载安装Python3.10,下载安装openssl1.1.1
  • RabbitMQ(一)概述第一个应用程序
  • 视频监控平台AS-V1000产品介绍:账户或用户数据的导入和导出功能介绍
  • ts:条件类型
  • MySQL:如果用left join的话,左边的表一定是驱动表吗
  • Diffusion Policy:基于扩散模型的机器人动作生成策略
  • CLIP源码详解:clip.py 文件
  • 【除了知乎,大家都在逛什么?持续更新~~】
  • python数据分析——apply 1
  • 全局查询筛选器适用场景 以及各场景示例
  • 算法刷题day54:搜索(一)
  • Alamofire常见GET/POST等请求方式的使用,响应直接为json
  • HQL面试题练习 —— 取出累计值与1000差值最小的记录
  • 链表经典题目—相交链表和链表倒数第k个节点
  • 自己简单写的 事件订阅机制
  • Cookie 在前端中的实践
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • Javascript Math对象和Date对象常用方法详解
  • Javascript基础之Array数组API
  • MQ框架的比较
  • MYSQL 的 IF 函数
  • Promise面试题,控制异步流程
  • Ruby 2.x 源代码分析:扩展 概述
  • scala基础语法(二)
  • Shell编程
  • Spring Cloud Feign的两种使用姿势
  • TCP拥塞控制
  • XML已死 ?
  • 工作手记之html2canvas使用概述
  • 简析gRPC client 连接管理
  • 聊聊flink的BlobWriter
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 学习笔记:对象,原型和继承(1)
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 运行时添加log4j2的appender
  • 找一份好的前端工作,起点很重要
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (6)设计一个TimeMap
  • (MATLAB)第五章-矩阵运算
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (学习日记)2024.01.09
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转载)深入super,看Python如何解决钻石继承难题
  • .Net IE10 _doPostBack 未定义
  • .net MySql
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .net流程开发平台的一些难点(1)
  • .Net中ListT 泛型转成DataTable、DataSet
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • [Angular] 笔记 16:模板驱动表单 - 选择框与选项