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

leetcode96--不同的二叉搜索树[java]

不同的二叉搜索树

  • leetcode 96 题 不同的二叉搜索树
  • 题目描述
  • 暴力递归
    • 解题思路
    • 代码演示
    • 执行效率
  • 递归 + 缓存
    • 解题思路
    • 代码演示
    • 执行效率
  • 动态规划专题

leetcode 96 题 不同的二叉搜索树

原题链接:
难度—中等
https://leetcode.cn/problems/unique-binary-search-trees/

题目描述

给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。

示例1:
在这里插入图片描述
输入:n = 3
输出:5

示例2:
输入:n = 1
输出:1

提示:
1 <= n <= 19

暴力递归

解题思路

第一先明白搜索二叉树得性质:
左 < 头 < 右
因此.在递归时,我们选中一个数字做头节点后,
剩下得数字里,只有小于这个数得才可以做左子树
大于这个数字的,可以做右子树.
最后在计算数量时,
要把可能组建左子树的情况,去乘右子树可能的情况
一个排列组合,应该能想明白把
好了.思路已经很清晰了.
开撸:

代码演示

  public int numTrees(int n) {//	== 1 时 无需处理if(n == 1){return 1;}return process1(1,n);}
/**
* 递归
* L 左边界
* R 右边界
* 左右边界 来确定哪些数字可以用于创建左子树
* 哪些数字可以创建右子树
*/public int process1(int L,int R){//base case 越界了//关于为什么越界要返回1 ,这样理解//L 到 R 一直在考察,怎么创建,如果都考察到越界了,//说明前面的情况成立了,所以返回一个1if(L > R){return 1;}//记录答案int ans = 0;for(int i = L ; i <= R;i++){//左树能组成的不同情况有几种int left = process1(L,i - 1);//右树能组成的不同情况有几种int right = process1(i+1,R);//排列组合的累加就是所有的情况了.ans += left * right;}return ans;}

执行效率

这个暴力的递归,执行起来.在leetcode 上跑不过去,会超出时间限制
但是代码是没问题的,我下面给你验证他是没问题的
代码逻辑不改,我们用递归加缓存 再来一版 ,就能跑过去

递归 + 缓存

解题思路

逻辑和暴力递归是一样的,只是我们加了缓存,
缓存怎么加,就是对递归里的变量进行缓存,
递归中的变量是L 和 R 左右边界,
因此加个二维数组,就可以了,
开撸,上代码

代码演示

  public int numTrees(int n) {if(n == 1){return 1;}//初始值都是0int[][]ans = new int[n + 1][n + 1];return process(1,n,ans);}/*** 递归加缓存* L 左边界* R 右边界* 左右边界 来确定哪些数字可以用于创建左子树* 哪些数字可以创建右子树*/public int process(int L,int R,int[][]nums){if(L > R){return 1;}//不等于0 时 从缓存中拿if(nums[L][R] != 0){return nums[L][R];}//下面逻辑和暴力递归是一样的.int ans = 0;for(int i = L ; i <= R;i++){int left = process(L,i - 1,nums);int right = process(i+1,R,nums);ans += left * right;}//答案保存在缓存中nums[L][R] = ans;return ans;}

执行效率

在这里插入图片描述

这个题,可以改动态规划 有兴趣的可以试一下

动态规划专题

斐波那契数列-从暴力递归到动态规划

背包问题–填满背包的最大价格

纸牌博弈问题

零钱兑换,凑零钱问题,从暴力递归到动态规划

相关文章:

leetcode96--不同的二叉搜索树[java]

不同的二叉搜索树 leetcode 96 题 不同的二叉搜索树题目描述暴力递归解题思路代码演示执行效率 递归 缓存解题思路代码演示执行效率 动态规划专题 leetcode 96 题 不同的二叉搜索树 原题链接: 难度—中等 https://leetcode.cn/problems/unique-binary-search-trees/ 题目描述 …...

【Spring 项目的创建和使用】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 1. 创建 Spring 项目 2. 创建一个 普通 Maven…...

数据类型.

数据类型 数据类型分类 数值类型 tinyint类型 数值越界测试&#xff1a; mysql> create table tt1(num tinyint); Query OK, 0 rows affected (0.02 sec)mysql> insert into tt1 values(1); Query OK, 1 row affected (0.00 sec)mysql> insert into tt1 values(128…...

深入了解JavaScript中的Promise

在JavaScript中&#xff0c;异步编程是必不可少的。过去&#xff0c;我们通常使用回调函数来处理异步操作&#xff0c;但回调地狱&#xff08;callback hell&#xff09;和复杂的错误处理使得代码难以维护。为了解决这些问题&#xff0c;ES6引入了Promise&#xff0c;它是一种更…...

Solidity基础六

生活本来就是平凡琐碎的&#xff0c;哪有那么多惊天动地的大事&#xff0c;快乐的秘诀就是不管对大事小事都要保持热情 目录 一、Solidity的特殊变量(全局) 二、Solidity的不可变量 immutable的赋值方式 三、Solidity的事件与日志 事件和日志加深理解 四、Solidity的异常…...

自学网络安全解决问题方法

自学网络安全很容易学着学着就迷茫了&#xff0c;找到源头问题&#xff0c;解决它就可以了&#xff0c;所以首先咱们聊聊&#xff0c;学习网络安全方向通常会有哪些问题&#xff0c;看到后面有惊喜哦 1、打基础时间太长 学基础花费很长时间&#xff0c;光语言都有几门&#xf…...

Java之旅(七)

Java 异常 Java异常&#xff08;Exception&#xff09;是在程序运行过程中出现错误或异常情况时&#xff0c;由程序自动抛出&#xff0c;导致程序无法正常运行&#xff0c;用于向上层调用程序传递错误信息或中断程序执行的一种机制。 异常与错误不同&#xff0c;错误是由于程…...

测试报告模板二

项目名称 系统测试报告 平台测试小组 2023年x月xx日 文档信息 文档名称: 作者:...

C语句概述

1 、 C 语句分类&#xff1a; ①控制语句&#xff1a;二个分支语句&#xff08; if-else 、 switch &#xff09;&#xff0c;三个循环语句&#xff08; for 、 while 、 do - while &#xff09;&#xff0c;四个转移语句&#xff08; continue 、 break 、 goto 、 return…...

C++ [STL之vector模拟实现]

本文已收录至《C语言和高级数据结构》专栏&#xff01; 作者&#xff1a;ARMCSKGT STL之vector模拟实现 前言正文空间结构默认成员函数构造函数拷贝构造函数赋值重载析构函数关于数据拷贝问题 迭代器容量操作查询容量容量操作 数据访问下标访问头尾数据访问 数据增删尾插尾删重…...

【算法竞赛进阶指南】141.周期 题解 KMP 最小循环节

题目描述 一个字符串的前缀是从第一个字符开始的连续若干个字符&#xff0c;例如 abaab 共有 5 5 5 个前缀&#xff0c;分别是 a&#xff0c;ab&#xff0c;aba&#xff0c;abaa&#xff0c;abaab。 我们希望知道一个 N N N 位字符串 S S S 的前缀是否具有循环节。 换言之…...

【Springboot 入门培训 】#19 Spring Boot 组件扫描与bean生命周期

目录 1 什么是组件扫描2 何时使用组件扫描3 扫描整个包basePackages与 includeFilters4 Spring boot 的 Bean 生命周期4.1 生命周期4.2 Bean 生命周期4.3 周期各个阶段 首先&#xff0c;我想先为你介绍一下“Spring”&#xff0c;这是一个开放源代码的设计模式解决方案和轻量级…...

Linux printf 函数输出问题

printf 函数并不会直接将数据输出到屏幕&#xff0c;而是先放到缓冲区中&#xff0c;只有一下三种情况满足&#xff0c;才会输出到屏幕。 1&#xff09; 缓冲区满 2&#xff09; 强制刷新缓冲区 fflush 3&#xff09; 程序结束时 1 #include<stdio.h>2 #include<st…...

皮卡丘Unsafe Fileupload

1.不安全的文件上传漏洞概述 文件上传功能在web应用系统很常见&#xff0c;比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后&#xff0c;后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等&#xff0c;然后将其按照设计的格式进行…...

最优化简明版(上)

引言 本文简单地介绍一些凸优化(Convex Optimization)的基础知识&#xff0c;可能不会有很多证明推导&#xff0c;目的是能快速应用到机器学习问题上。 凸集 直线与线段 设 x 1 ≠ x 2 x_1 \neq x_2 x1​x2​为 R n \Bbb R^n Rn空间中的两个点&#xff0c;那么具有下列形…...

MySQL的一些介绍

1. SQL的select语句完整的执行顺序 SQL Select语句完整的执行顺序&#xff1a; 1、from子句组装来自不同数据源的数据&#xff1b; 2、where子句基于指定的条件对记录行进行筛选&#xff1b; 3、group by子句将数据划分为多个分组&#xff1b; 4、使用聚集函数进行计算&am…...

unity发布webGL后无法预览解决

众所周知&#xff0c;unity发布成webgl后是无法直接预览的。因为一般来说浏览器默认都是禁止webgl运行的。 直接说我最后的解决方法&#xff1a;去vscode里下载一个live server ,安装好。 下载vscode地址Visual Studio Code - Code Editing. Redefined 期间试过几种方法都不管…...

Flume和Kafka的组合使用

一.安装Kafka 1.1下载安装包 通过百度网盘分享的文件&#xff1a;复制链接打开「百度网盘APP 即可获取」 链接&#xff1a;https://pan.baidu.com/s/1vC6Di3Pml6k1KMbnK0OE1Q?pwdhuan 提取码&#xff1a;huan 也可以访问官网&#xff0c;下载kafka2.4.0的安装文件 1.2解…...

JSONSQL:使用SQL过滤JSON类型数据(支持多种数据库常用查询、统计、平均值、最大值、最小值、求和语法)...

1. 简介 在开发中&#xff0c;经常需要根据条件过滤大批量的JSON类型数据。如果仅需要过滤这一种类型&#xff0c;将JSON转为List后过滤即可&#xff1b;如果相同的条件既想过滤数据库表中的数据、也想过滤内存中JSON数据&#xff0c;甚至想过滤Elasticsearch中的数据&#xff…...

Linux输入输出重定向

目录 Linux输入输出重定向 Linux中的默认设备 输入输出重定向定义 输入输出重定向操作符 实用形式 标准输入、标准输出、标准错误 输出重定向案例 案例1 --- 输出重定向&#xff08;覆盖&#xff09; 案例2 --- 输出重定向&#xff08;追加&#xff09; 案例3 --- 错误…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...