力扣96不同的二叉搜索树详解

        最近在写动态规划的题目,这些题目的标签都标有数学,说来也是找规律题,但是这个规律真不是正常情况下可以找到的,即使看了解析有时候也写不出来,今天难得看了点解析就自己写出来的,因此分享一下这道题的想法和题解。

        废话少说,我们直接进入正题,首先要了解二叉搜索树的特点:根节点的左子树上所有节点都小于根节点,右子树上所有节点都大于根节点。然后就是找规律,以n=3为例:以1为根节点时,其余元素都大于1,左子树节点数为0,结果记为一次,右子树节点为2,在不考虑数值的话左右子树排列总数就等于n=2时候的值,即当1为根节点时结果数位arr[0]*arr[2];当2为根节点时,剩余节点一个大于2一个小于2,即左右子树各有一个节点,在不考虑值得情况下此时结果为arr[1]*arr[1];当3为根节点时,思路和1为根节点相同,只是所有节点都小于3,因此所有节点都在左子树上,右子树上的节点数为0,即结果为arr[2]*arr[0]。那么n=3能产生的不同二叉搜索树有arr[0]*arr[2]+arr[1]*arr[1]+arr[2]*arr[0]个。

        由题意可计算出arr[1]=1,arr[2]=2,arr[3]=5,代码如下:

        var numTrees = function (n) {let arr = new Array(n + 1).fill(0)//创建数组时创建n+1个,写的时候不会受到索引和n值差异的影响。arr[0] = 1, arr[1] = 1, arr[2] = 2, arr[3] = 5//当n=0时结果也可看成只有一次。for (let i = 4; i <= n; i++) {//从4开始向后求出其他值let m1 = 0//创建记录每个i时的总可能数for (let j = 1; j <= i; j++) {//遍历i时每一位作为根节点时候的可能let m2 =1//记录每一位作为根节点时候的可能if (j !== 1) {//当n不等于1时表示左右节点均有值m2 = arr[j - 1] * arr[i - j]} else {m2 = arr[i - j]}m1 += m2}arr[i] = m1//将i时的值赋给数组。}return arr[n]//返回最后一个值即结果。};

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

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

相关文章

C# Winfrom实现的肺炎全国疫情实时信息图

运行结果&#xff1a; using System; using System.Drawing; using System.Text; using NSoup; using NSoup.Nodes; using System.IO; using System.Net; using System.Text.RegularExpressions; using System.Windows.Forms;namespace Pneumonia {public partial class MainFo…

docker (七)-部署容器

实战开始&#xff1a; 1 docker 部署 kafka 集群&#xff0c;并验证 参考 Docker搭建Kafka集群 优秀文档 2 docker 部署 mysql 参考上一篇docker(六) 3.docker 部署 zabbix 参考 docker部署zabbix 优秀文档 BUG&#xff1a;根据这篇文章部署后&#xff0c;发现zabbix-s…

vue封装el-table表格组件

先上效果图&#xff1a; 本文包含了具名插槽、作用域插槽、jsx语法三种&#xff1a; Render.vue&#xff08;很重要&#xff0c;必须有&#xff09;: <script> export default {name: "FreeRender",functional: true,props: {scope:Object,render: Functio…

docker 使用运行指令讲解

1、新建运行并挂载容器 docker run -d -p 80:80 -v /path/on/host:/path/in/container nginx docker run 指令讲解 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] option 作用 -i 以交互模式运行容器&#xff0c;通常与 -t 同时使用 -t 启动容器后&#xff0c;为容器…

面试题 17.23. 最大黑方阵

文章目录 题意思路代码 题意 题目链接 找到最长的边都是0的正方形&#xff0c;如果长度想等&#xff0c;尽可能起点小 思路 暴力剪枝dp &#xff0c;预处理每个点的上下左右最长长度&#xff0c;再去枚举长度去转移 代码 // 力大飞砖 class Solution { public:vector<…

6.2 数据库

本节介绍Android的数据库存储方式--SQLite的使用方法&#xff0c;包括&#xff1a;SQLite用到了哪些SQL语法&#xff0c;如何使用数据库管理操纵SQLitem&#xff0c;如何使用数据库帮助器简化数据库操作&#xff0c;以及如何利用SQLite改进登录页面的记住密码功能。 6.2.1 SQ…

如何取消和设置MultiIndex(pandas)

什么是多重索引&#xff1f; 多重索引是这样的。 有点烦&#xff0c;所以研究了如何摆脱它。 [如何取消] 对于df 中的列或行。 下面显示了两种方法。 #Index df.index df.index.get_level_values(0) df.index df.index.droplevel(1)#Column df.columns df.columns.get_l…

Word 文档中的图片另存为 .jpg 格式图片

Word 文档中的图片另存为 .jpg 格式图片 1. Office 按钮 -> 另存为2. 筛选过的网页 (*.htm;*.html)3. 查看生成文件夹References 1. Office 按钮 -> 另存为 2. 筛选过的网页 (*.htm;*.html) ​​​ 3. 查看生成文件夹 References [1] Yongqiang Cheng, https://yongq…

春晚刘谦的魔术动画

文章目录 前言约瑟夫问题刘谦魔术拆解魔术工程化前言 有人曾经说过“魔术的尽头是数学”,一些看似简单的魔术表演背后其实蕴含着深刻的数学理论,2024年春晚刘谦的魔术节目就深刻的阐释了数学与魔术这样一种微妙的关系,其中就涉及到著名的约瑟夫问题,为此我们来一探究竟。 …

(十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)

简述 操作路径如下: 作用:通过逐步增加线程数来模拟用户并发访问。配置:设置This group will start、First,wait for 、Then start、Next , add等参数。使用场景:模拟逐步增长的并发访问,观察应用程序的性能变化。优点:适用于测试应用程序在逐步增加负载下的性能表现。…

全面总结!加速大模型推理的超全指南来了!

2023 年&#xff0c;大型语言模型&#xff08;LLM&#xff09;以其强大的生成、理解、推理等能力而持续受到高度关注。然而&#xff0c;训练和部署 LLM 非常昂贵&#xff0c;需要大量的计算资源和内存&#xff0c;因此研究人员开发了许多用于加速 LLM 预训练、微调和推理的方法…

BlackberryQ10 是可以安装 Android 4.3 应用的

BlackberryQ10 是可以安装 Android 4.3 应用的 最近淘了个 Q10 手机&#xff0c;非常稀罕它&#xff0c;拿着手感一流。这么好的东西&#xff0c;就想给它装点东西&#xff0c;但目前所有的应用都已经抛弃这个安卓版本了。 一、开发环境介绍 BlackBerry Q10 的 安卓版本是 4.…

NestJS入门8:拦截器

前文参考&#xff1a; NestJS入门1&#xff1a;创建项目 NestJS入门2&#xff1a;创建模块 NestJS入门3&#xff1a;不同请求方式前后端写法 NestJS入门4&#xff1a;MySQL typeorm 增删改查 NestJS入门5&#xff1a;加入Swagger NestJS入门6&#xff1a;日志中间件 Nes…

python-pyqt5-工具按钮(QToolButton)添加菜单(QMenu)

QToolButton提供了比普通按钮更丰富的功能。它可以显示一个图标、一个文本或二者结合&#xff0c;还支持各种样式和行为&#xff0c;例如弹出菜单或多种动作模式 样式 setToolButtonStyle(Qt.ToolButtonStyle) # 设置按钮样式风格# 参数Qt.ToolButtonIconOnly …

回显服务器

. 写一个应用程序,让这个程序可以使用网络通信,这里就需要调用传输层提供的api,传输层提供协议,主要是两个: UDP,TCP,它们分别提供了一套不同的api,socket api. UDP和TCP UDP:无连接,不可靠传输,面向数据报,全双工 TCP:有连接,可靠传输,面向字节流,全双工 一个客户端可以连接…

spring boot3参数校验基本用法

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途。 目录 前置条件 前言 导入依赖 使用介绍 配置检验规则 开启校验 使用注意 全局异常捕获返回友好提示信息 常用的校…

Leadmium TM Green AM dye,适用于流式细胞仪、荧光显微镜成像

文章关键词&#xff1a;铅离子(镉离子)绿色荧光探针&#xff0c;Leadmium TM Green AM dye&#xff0c;镉离子绿色荧光探针 一、基本信息 产品简介&#xff1a;Leadmium TM Green AM染料是一种高度特异性和高灵敏度的检测细胞内铅离子&#xff08;lead&#xff09;和镉&#…

qt-双臂SCARA机器人动画

qt-双臂SCARA机器人动画 一、演示效果二、核心程序三、下载链接 在Qt opengl中完成的双臂SCARA机器人的简单模拟。 一、演示效果 二、核心程序 #include "glwidget.h"#include <GL/glu.h>GLWidget::GLWidget(QWidget *parent) :QGLWidget(parent),pitch(30.…

js设计模式:适配器模式

作用: 可以将某种不同格式的数据转化为自己所期待的数据格式 或者对于一些存在兼容或者特殊处理的业务逻辑,可以进行一个适配 示例: //原始数据let oldData1 [{name: 王惊涛,age: 29},{name: 孙悟空,age: 800},{name: 嘉文四世,age: 27},{name: 关羽,age: 40},{name: 伊利丹…

【天衍系列 01】深入理解Flink的 FileSource 组件:实现大规模数据文件处理

文章目录 01 基本概念02 工作原理03 数据流实现04 项目实战4.1 项目结构4.2 maven依赖4.3 StreamFormat读取文件数据4.4 BulkFormat读取文件数据4.5 使用小结 05 数据源比较06 总结 01 基本概念 Apache Flink 是一个流式处理框架&#xff0c;被广泛应用于大数据领域的实时数据…