代码随想录算法营Day38 | 62. 不同路径,63. 不同路径 II,343. 整数拆分,96. 不同的二叉搜索树

devtools/2025/2/19 11:10:26/

62. 不同路径

这题的限制是机器人在m x n的网格的左上角,每次只能向下走一格或者向右走一格。问到右下角有多少条不同路径。这个动态规划的初始状态是第一行和第一列的格子的值都是1,因为机器人只能向右走一格或者向下走一格,所以第一行和第一列的格子的不同路径数只能是1.而其他格子的路径数取决于每个格子的正上方和左边两个格子的路径数之和,即状态转移公式为

 dp[i][j] = dp[i-1][j] + dp[i][j-1]。

python">class Solution:def uniquePaths(self, m: int, n: int) -> int:dp = [[0] * n for _ in range(m)]for i in range(m):dp[i][0] = 1for i in range(n):dp[0][i] = 1for x in range(1,m):for y in range(1,n):dp[x][y] = dp[x-1][y] + dp[x][y-1]return dp[m-1][n-1]

63. 不同路径 II

这道题比上道题多了一个条件就是网格图中多了障碍物。但并不影响整体的思路,不过就是在状态初始化的时候遇到障碍物后就终止循环。在进行状态转移的时候也只更新非障碍物格子的值即可。

python">class Solution:def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:m,n = len(obstacleGrid),len(obstacleGrid[0])dp = [[0] * n for _ in range(m)]for i in range(m):if obstacleGrid[i][0] == 1:breakelse:dp[i][0] = 1for i in range(n):if obstacleGrid[0][i] == 1:breakelse:dp[0][i] = 1for i in range(1,m):for j in range(1,n):if obstacleGrid[i][j] == 0:dp[i][j] = dp[i-1][j] + dp[i][j-1]return dp[m-1][n-1]

343. 整数拆分

这题我们从小到大一点点拆,每次dp记录该数所拆出来的正整数的最大乘积。所以状态转移公式就是

dp[i] = max(dp[i],max([(i-j)*j,dp[i-j]*j))

这里的i代表要拆的数字,j代表拆出去的某个正整数,这里面又比较了一次(i-j)*jdp[i-j]*j是因为这个数所拆出来的正整数的最大乘积未必有他自身大,所以我们需要判断是直接取这个数本身还是dp记录的该数所拆出来的正整数的最大乘积。

python">class Solution:def integerBreak(self, n: int) -> int:dp = [0] * (n+1)dp[2] = 1for i in range(3,len(dp)):for j in range(1,i):dp[i] = max(dp[i],max((i-j)*j,dp[i-j]*j))return dp[n]

96. 不同的二叉搜索树

这题分析,当n为1的时候,只有1种,当n为2的时候,有2种,当n为3的时候,总共可以有5种。那么我们就可以发现当dp[3]的时候就是 元素1为头结点搜索树的数量 + 元素2为头结点搜索树的数量 + 元素3为头结点搜索树的数量那么状态转移公式就是:

dp[i] += dp[j-1] * dp[i-j]

python">class Solution:def numTrees(self, n: int) -> int:dp = [0] * (n+1)dp[0] = 1for i in range(1,n+1):for j in range(1,i+1):dp[i] += dp[j-1] * dp[i-j]return dp[n]


http://www.ppmy.cn/devtools/159024.html

相关文章

ES面试题

准备Elasticsearch(ES)相关的面试时,了解常见的面试题及其答案是非常重要的。以下是一些典型的Elasticsearch面试题以及详细的解答,帮助你更好地准备面试。 Elasticsearch 基础概念 1. 什么是Elasticsearch? 答&…

pycharm上传github问题:rejected

我从pycharm上传项目时,遇到的问题: 以下是一些解决思路: 这个错误提示表明,你在尝试将本地代码推送到远程仓库时,远程仓库中已经包含了你本地尚未获取的更改。换句话说,远程仓库的代码比你的本地代码更新…

什么是 大语言模型中Kernel优化

什么是 大语言模型中Kernel优化 目录 什么是 大语言模型中Kernel优化Kernel优化操作系统内核优化深度学习计算内核优化手工优化原理举例Flash Attention,Faster TransformerKernel优化 大语言模型存在访存密集操作(如注意力机制、LayerNorm等),这些操作使得GPU计算性能无法…

华象新闻 | 2月20日前谨慎升级 PostgreSQL 版本

各位 PostgreSQL 用户,建议近期进行升级 PostgreSQL 版本。 2月20日计划进行非周期性版本发布 PostgreSQL全球开发团队计划于2025年2月20日进行一次非周期性发布,以解决2025年2月13日更新版本中引入的一个回归问题。 2月13日的更新版本包括了17.3、16.7、…

USART串口协议

USART串口协议 文章目录 USART串口协议1. 通信接口2.串口通信2.1硬件电路2.2电平标准2.3串口参数及时序(软件部分) 3.USART串口外设3.1串口外设3.2USART框图3.3USART基本结构3.4数据帧 4.输入电路4.1起始位侦测4.2数据采样 5.波特率发生器6.相关函数介绍…

python 爬虫教程 0 基础入门 一份较为全面的爬虫python学习方向

文章目录 前言一、Python 爬虫简介二、环境搭建1. 下载 Python2. 安装 Python3. 安装必要的库 三、一个简单的爬虫示例四、应对网站反爬机制五、深入学习方向 前言 以下是一份较为全面的 Python 爬虫教程,涵盖基础知识、环境搭建、简单示例、反爬应对及深入学习方向…

牛客面筋学习

准备阶段: 楼主其实很早就开始准备了,大概从年初开始,陆陆续续总结自己的项目,复盘,然后复习数电模电信号电路等,复习完后,便开始刷题;顺便说一下,如果需要发小论文的也…

2024最新版JavaScript逆向爬虫教程-------基础篇之Chrome开发者工具学习

目录 一、打开Chrome DevTools的三种方式二、Elements元素面板三、Console控制台面板四、Sources面板五、Network面板六、Application面板七、逆向调试技巧 7.1 善用搜索7.2 查看请求调用堆栈7.3 XHR 请求断点7.4 Console 插桩7.5 堆内存函数调用7.6 复制Console面板输出 工…