代码随想录算法训练营第三十九天 | 62.不同路径、63. 不同路径 II、343. 整数拆分、96.不同的二叉搜索树

62.不同路径

题目链接:https://leetcode.cn/problems/unique-paths/
文档讲解:https://programmercarl.com/0062.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE…
视频讲解:https://www.bilibili.com/video/BV1ve4y1x7Eu/

思路

  • 确定dp数组以及下标的含义:走到第i行第j个格子有dp[i][j]种方法。
  • 确定递推公式:dp[i][j] = dp[i - 1][j] + dp[i][j - 1];因为可以往下走和往右走,所以第i行第j列的点要么是从左边来,要么是从上面来,所以是把这两个格子的方法数相加。
  • dp数组如何初始化:初始化第一行和第一列的数据,都只有一种方法可以到达,就是一直往右走或一直往下走。
  • 确定遍历顺序:dp[i][j]都是从其上方和左方推导而来,那么从左到右一层一层遍历就可以了。
  • 打印dp数组,用于debug。

代码

class Solution {public int uniquePaths(int m, int n) {int[][] dp = new int[m][n];for (int i = 0; i < m; i++) dp[i][0] = 1;for (int i = 0; i < n; i++) dp[0][i] = 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];}
}

分析:时间复杂度:O(m * n),空间复杂度:O(m * n)。

63. 不同路径 II

题目链接:https://leetcode.cn/problems/unique-paths-ii/
文档讲解:https://programmercarl.com/0063.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE…
视频讲解:https://www.bilibili.com/video/BV1Ld4y1k7c6/

思路

  • 确定dp数组以及下标的含义:走到第i行第j个格子有dp[i][j]种方法。
  • 确定递推公式:dp[i][j] = dp[i - 1][j] + dp[i][j - 1];因为可以往下走和往右走,所以第i行第j列的点要么是从左边来,要么是从上面来,所以是把这两个格子的方法数相加。但如果这一格有障碍,就为0。
  • dp数组如何初始化:本题和上面一道题不以言大哥地方在于本体有障碍,那么初始化的时候,如果遇到了障碍,后面的格子就不可达,为0。
  • 确定遍历顺序:dp[i][j]都是从其上方和左方推导而来,那么从左到右一层一层遍历就可以了。
  • 打印dp数组,用于debug。

代码

class Solution {public int uniquePathsWithObstacles(int[][] obstacleGrid) {int m = obstacleGrid.length, n = obstacleGrid[0].length;int[][] dp = new int[m][n];for (int i = 0; i < m && obstacleGrid[i][0] == 0; i++) dp[i][0] = 1;for (int i = 0; i < n && obstacleGrid[0][i] == 0; i++) dp[0][i] = 1;for (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {if (obstacleGrid[i][j] != 1) {dp[i][j] = dp[i][j - 1] + dp[i - 1][j];}}}return dp[m - 1][n - 1];}
}

分析:时间复杂度:O(),空间复杂度:O()。

343. 整数拆分

题目链接:https://leetcode.cn/problems/integer-break/
文档讲解:https://programmercarl.com/0343.%E6%95%B4%E6%95%B0%E6%8B%86%E5%88%86.html
视频讲解:https://www.bilibili.com/video/BV1Mg411q7YJ/

思路

  • 确定dp数组以及下标的含义:分拆数字i,可以得到的最大乘积为dp[i]
  • 确定递推公式:从1遍历j,然后有两种渠道得到dp[i]
    • 一个是j * (i - j) 直接相乘。
    • 一个是j * dp[i - j],相当于是拆分(i - j)。
    • 最后递推公式为dp[i] = Math.max(j * (i - j), Math.max(j * dp[i - j], dp[i]));
    • 在j循环的过程中,会多次计算dp[i],取最大的。
  • dp数组如何初始化:dp[0]dp[1]其实是没有意义的,就初始化为0。
dp[0] = 0;
dp[1] = 0;
dp[2] = 1;
  • 确定遍历顺序:从前向后遍历。
  • 打印dp数组,用于debug

代码

class Solution {public int integerBreak(int n) {int[] dp = new int[n + 1];dp[0] = 0;dp[1] = 0;dp[2] = 1;for (int i = 3; i <= n; i++) {for (int j = 1; j <= i / 2; j++) { // 要拆分成近似相等的数,j大于i的情况就不考虑了dp[i] = Math.max(j * (i - j), Math.max(j * dp[i - j], dp[i]));}}return dp[n];}
}

分析:时间复杂度:O(n2),空间复杂度:O(n)。

96.不同的二叉搜索树

题目链接:https://leetcode.cn/problems/unique-binary-search-trees/
文档讲解:https://programmercarl.com/0096.%E4%B8%8D%E5%90%8C%E7%9A%84%E4%BA%8C%E5%8F%89%E6%90%9C%E7…
视频讲解:https://www.bilibili.com/video/BV1eK411o7QA/

思路

  • 确定dp数组以及下标的含义:有i个节点的二叉搜索树有dp[i]中不同的形状。
  • 确定递推公式:确定一个根节点后,这个二叉树的形状数由左右子树形状数量相乘决定,即dp[i] += dp[j] * dp[i - j - 1];
  • dp数组如何初始化:dp[0] = 1; dp[1] = 1;,0个节点也算一种形状。
  • 确定遍历顺序:从前往后遍历。
  • 打印dp数组,用于debug

代码

class Solution {public int numTrees(int n) {int[] dp = new int[n + 1];dp[0] = 1;dp[1] = 1;for (int i = 2; i < dp.length; i++) {for (int j = 0; j < i; j++) {dp[i] += dp[j] * dp[i - j - 1];}}return dp[n];}
}

分析:时间复杂度:O(n2),空间复杂度:O(n)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/27904.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FFmpeg YUV编码为H264

使用FFmpeg库把YUV420P文件编码为H264文件&#xff0c;FFmpeg版本为4.4.2-0。 需要yuv测试文件的&#xff0c;可以从我上传的MP4文件中用ffmpeg提取&#xff0c;命令如下&#xff1a; ffmpeg -i <输入MP4文件名> -pix_fmt yuv420p <输出YUV文件名>例如&#xff1…

2_2、MFC对话框应用

对话框应用 模态与非模态对话框模态对话框弹出模态对话框创建模态对话框 非模态对话框 属性页对话框向导对话框一般属性页对话框 消息对话框函数原型函数返回值调用 文件对话框字体对话框获取字体对话框中所选字体选取字体样式并显示在编辑框中 颜色对话框获取取颜色对话框中所…

word空白页删除不了怎么办?

上方菜单栏点击“视图”&#xff0c;下方点击“大纲视图”。找到文档分页符的位置。将光标放在要删除的分节符前&#xff0c;按下键盘上的“Delet”键删除分页符。

L52--- 144. 二叉树的后序遍历(深搜)---Java版

1.题目描述 2.思路 (1)二叉树后序遍历&#xff1a;左右根 (2)根节点的压入: 根节点首先被压入stack中&#xff0c;然后被弹出并压入output中。 遍历过程: stack用于存储需要遍历的节点。 output用于反转遍历顺序。 入栈顺序: 左子节点先入栈&#xff0c;右子节点后入栈。这…

基于C#开发web网页管理系统模板流程-总集篇

第一篇 基于C#开发web网页管理系统模板流程-登录界面和主界面_c#的网页编程-CSDN博客 第二篇 基于C#开发web网页管理系统模板流程-主界面管理员录入和编辑功能完善_c#网页设计-CSDN博客 第三篇 基于C#开发web网页管理系统模板流程-主界面管理员入库和出库功能完善_c#web程序设计…

北京汽车美容元宇宙,未来已来

随着科技的不断进步和市场需求的日益增长&#xff0c;元宇宙的概念正在逐渐渗透到我们生活的方方面面。北京&#xff0c;这座科技创新的前沿城市&#xff0c;正见证着汽车美容元宇宙的悄然兴起&#xff0c;为传统汽车美容行业注入了新的活力和想象空间。 在政策的积极推动和市…

从面试角度了解前端基础知识体系

目录 前端专业知识相关面试考察点 HTML 与 CSS Javascript 网络相关 浏览器相关 安全相关 算法与数据结构 计算机通用知识 前端项目经验相关面试考察点 前端框架与工具库 Node.js 与服务端 性能优化 前端工程化 开发效率提升 监控、灰度与发布 多人协作 结束语…

目标检测数据集 - PCB板表面缺陷检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍&#xff1a;PCB 板表面缺陷检测数据集&#xff0c;真实采集高质量 PCB 板表面含缺陷图片数据&#xff0c;数据集含多款不同 PCB 板高清表面图片数据&#xff0c;包括俯拍正拍、旋转拍摄姿态。数据标注标签包括 missing_hole、mouse_bite、open_circuit、short、spur…

【Python推导式秘籍】:一行代码的艺术,高效数据处理之道

文章目录 &#x1f68b;Python推导式&#x1f680;一、列表推导式&#x1f308;1. 了解推导式❤️2. 实践&#x1f4a5;3. 总结 &#x1f680;二、字典推导式&#x1f308;1. 了解字典推导式❤️2. 实践&#x1f4a5;3. 总结 &#x1f680;三、集合推导式&#x1f308;1. 了解集…

AI实践与学习5-AI解题场景RAG应用预研demo

背景 AI解题场景现状&#xff0c;教研测评文档&#xff1a;xxx 解题正确率仍需进一步提高&#xff0c;提示词优化方案基本无力o目前配置的易错题CoT示例支持的长度有限&#xff0c;后续题量大的时候配置具有局限性。某些英语翻译题型BAD CASE反映大模型的输出格式不太符合要求…

java:spring【AnnotationMetadata】的简单使用例子

# 项目代码资源&#xff1a; 可能还在审核中&#xff0c;请等待。。。 https://download.csdn.net/download/chenhz2284/89435385 # 项目代码 【pom.xml】 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-start…

Linxu开机出现 Generating “/run/initramfs/rdsosreport.txt“解决方案

Linxu开机出现 Generating "/run/initramfs/rdsosreport.txt"解决方案 解决&#xff1a; 一、找这个-root结尾的文件也不一样。 大家可以用ls /dev/mapper查看到自己装的镜像对应的以-root结尾的文件是哪个。 二、所以我们运行的是&#xff1a;xfs_repair /dev/map…

Flutter 自定义日志模块设计

前言 村里的老人常说&#xff1a;“工程未动&#xff0c;日志先行。” 有效的利用日志&#xff0c;能够显著提高开发/debug效率&#xff0c;否则程序运行出现问题时可能需要花费大量的时间去定位错误位置和出错原因。 然而一个复杂的项目往往需要打印日志的地方比较多&#…

大数据计算入门指南

大数据计算是指处理和分析大量数据的技术和方法。以下是一个入门指南&#xff0c;帮助你了解大数据计算的基本概念、工具和技术。 1. 大数据的特点 大数据通常具有以下四个主要特点&#xff1a; Volume&#xff08;数据量&#xff09;&#xff1a;数据的规模非常大。Velocit…

Spring Data JPA 通过方法名查询,通过名字查找用户区分用户名大小写吗

Spring Data JPA 通过方法名来定义查询时&#xff0c;是否区分大小写主要取决于底层数据库的校对集&#xff08;collation&#xff09;和JPA查询的默认行为。 首先&#xff0c;当你使用Spring Data JPA 的方法名查询时&#xff0c;如 findByName(String name)&#xff0c;Spri…

Linux动态Web服务器(Tomcat)

文章目录 一、动态网页介绍二、动态网页的工作原理三、动态网页常见技术3.1、CGI技术3.2、PHP技术3.3、JSP技术3.4、ASP技术 四、Tomcat4.1、什么是Tomcat4.2、Tomcat安装4.3、检查Tomcat进程4.4、编写Tomcat开机自动运行脚本4.4、解决激活状态 默认情况下&#xff0c;Apache只…

web错题(1)

action属性是form标签的必须属性&#xff0c;用于指定表单提交时表单数据将被发往哪里 dir能够指定文本显示方向的属性 可以产生下拉列表的标记时<select> multiple属性设为true&#xff0c;表示输入字段可以选择多个值 lable标签的for属性可以把lable绑定到另一个元…

Qt中的事件循环

Gui框架一般都是基于事件驱动的&#xff0c;Qt也不例外&#xff0c;在 Qt 框架中&#xff0c;事件循环&#xff08;Event Loop&#xff09;是一个核心机制&#xff0c;负责管理和分发应用程序中的所有事件和消息。它确保了应用程序能够响应用户输入、定时器事件、窗口系统事件等…

vagrant putty错误的解决

使用Vagrant projects for Oracle products and other examples 新创建的虚机&#xff0c;例如vagrant-projects/OracleLinux/8。 用vagrant ssh可以登录&#xff1a; $ vagrant ssh > vagrant: Getting Proxy Configuration from Host...Welcome to Oracle Linux Server …

网络协议,OSI,简单通信,IP和mac地址

认识协议 1.讲故事 2004年&#xff0c;小明因为给他爹打电话&#xff08;座机&#xff09;费用太贵&#xff0c;所以约定一种信号&#xff0c;响一次是报平安&#xff0c;响两次是要钱&#xff0c;响三次才需要接通。 2.概念 协议&#xff1a;是一种约定&#xff0c;这种约…