力扣96 不同的二叉搜索树 Java版本

文章目录

  • 题目描述
  • 代码


题目描述

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

示例 1:
在这里插入图片描述

输入:n = 3
输出:5
示例 2:

输入:n = 1
输出:1

提示:

1 <= n <= 19

代码

import java.lang.annotation.Retention;class Solution {public int numTrees(int n) {int[] dp = new int[n+1];dp[0]=1;dp[1]=1;/*以三个点为例子,大致可以分为三种类型:1、以1为根节点,左子树0个节点,右子树2个节点,总共两种树的形态2、以2为根节点,左右子树各1个节点,总共1种树的形态3、以3为根节点,左子树2个节点,右子树0个节点,总共2种树的形态所以dp[3]也就是n=3的时候二叉搜索树的形态的个数是这三种情况之和:2+1+2对于n=i的时候来讲,左子树有j个节点,右子树就只能有i-j-1个节点,根据数学中组合排列的内容,形态总数应该是左子树的形态数乘以右子树的形态数,即dp[j]*dp[i-j-1]最终,n=i的时候的形态总数是选不同节点作为根节点所能够形成的树的形态个数之和,即dp[i] = dp[i]+dp[j]*dp[i-j-1];*/for (int i = 2; i <=n ; i++) {for (int j = 0; j <i ; j++) {//这里选择j从0开始的意思是j代表左子树上节点的数量,左子树上最开始一个节点没有全都在右子树上dp[i] = dp[i]+dp[j]*dp[i-j-1];}}return dp[n];}
}

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

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

相关文章

鸿蒙低代码开发一个高频问题

在版本是DevEco Studio 3.1.1 Release&#xff0c;SDK是3.1.0(API9)。 创建和设计的visual文件经常会遇到无法渲染的情况&#xff0c;或者自定义组件在Custom列表中突然不见了的情况。 有以下报错信息的&#xff1a; JSON schema validation error: data/visualModel/value/…

强化学习面试题

强化学习面试题通常会涵盖该领域的多个方面,包括基本概念、算法、应用以及实践问题。以下是一些常见的强化学习面试题及其简要回答: 基本概念题: 什么是强化学习? 强化学习是一种通过智能体与环境交互来学习最优行为策略的机器学习范式。智能体根据当前状态选择动作,环境…

React Native 快速Demo(2)

好的&#xff0c;以下是开发环境的详细设置步骤&#xff0c;包括需要安装的工具和每个工具的安装步骤。 1. Node.js 和 npm Node.js 是一个 JavaScript 运行时环境&#xff0c;npm 是 Node.js 的包管理器。 1.1 安装 Node.js 和 npm 下载 Node.js 安装程序&#xff1a;Node…

小程序for循环中的key值有什么用

在小程序&#xff08;特别是微信小程序&#xff09;中&#xff0c;当使用类似于 wx:for 的指令来渲染一个列表时&#xff0c;key 属性&#xff08;或称为 wx:key&#xff09;是一个非常重要的属性。这个属性用于指定列表中项目的唯一的标识符&#xff0c;以帮助小程序优化渲染性…

springboot + Vue前后端项目(第十五记)

项目实战第十五记 写在前面1.后端接口实现1.1 用户表添加角色字段1.2 角色表增加唯一标识字段1.3 UserDTO1.4 UserServiceImpl1.5 MenuServiceImpl 2. 前端实现2.1 User.vue2.2 动态菜单设计2.2.1 Login.vue2.2.2 Aside.vue 2.3 动态路由设计2.3.1 菜单表新增字段page_path2.3.…

【Windows】Revo Uninstaller Pro(卸载工具) v5.2.6 绿色版软件介绍

软件介绍 Revo Uninstaller Pro是一款功能强大的软件卸载工具&#xff0c;它可以帮助用户彻底地清理和卸载计算机上的程序。以下是Revo Uninstaller Pro的一些主要特点&#xff1a; 强大的卸载功能&#xff1a;Revo Uninstaller Pro可以代替操作系统的自带卸载程序&#xff0c…

嵌入式C语言面试题笔试题

一、常见的关键词&#xff1a;sizeof&#xff08;strlen&#xff09;、static、const、volatitle&#xff08;会持续更新&#xff09; 1、sizeof和strlen的区别 &#xff08;1&#xff09;sizeof是求数据类型所占空间的大小&#xff0c;是一个操作符&#xff0c;在编译时计算…

系统架构设计师【补充知识】: 专业英语 (核心总结)

系统架构设计师考试英文试题的出题范围基本局限于系统架构设计方面基础性的、概念性的知识&#xff0c;大多属于名词解释范畴。 一、架构风格 An architectural style defines as a family of such systems in terms of a pattern of structural organization. More specific…

用QT6、QML、FFMPEG写一个有快进功能的影音播放程序

程序如图&#xff1a; 开发环境在ubuntu下&#xff0c;如果改windows下&#xff0c;也就改一下cmakelists.txt。windows下如何配置ffmpeg以前的文章有写&#xff0c;不再重复。 源程序如下&#xff1a; GitHub - wangz1155/ffmpegAudioThread: 用qt6&#xff0c;qml&#xff…

SpringBoot+Vue甘肃非物质文化网站(前后端分离)

技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 系统角色对应功能 用户管理员 系统功能截图

HTTP-web服务器

web服务器 web服务器实现了http和相关的tcp连接处理&#xff0c;负责管理web服务器提供的资源&#xff0c;以及对服务器的配置&#xff0c;控制以及拓展等方面的管理 web服务器逻辑实现了http协议&#xff0c;并负责提供web服务器的管理功能&#xff0c;web服务器逻辑和操作系…

用幻灯片讲解内存分配器Allocator

用幻灯片讲解内存分配器Allocators Allocators 分配器 提供内存分配策略的通用接口委托给 C 运行时&#xff1a;new / delete块内存池不同大小的块内存池 为什么用分配器? 将容器逻辑与内存分配策略解耦速度&#xff1a;内存分配速度慢确保有足够的内存可用确保所需的内…

C语言详解(动态内存管理)2

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

7-16 二分查找

7-16 二分查找 分数 25 全屏浏览 切换布局 作者 李廷元 单位 中国民用航空飞行学院 请实现有重复数字的有序数组的二分查找。 输出在数组中第一个大于等于查找值的位置&#xff0c;如果数组中不存在这样的数&#xff0c;则输出数组长度加一。 输入格式: 输入第一行有两个…

配网终端通讯管理板,稳控装置通讯管理卡,铁路信号通讯管理卡

配网终端通讯管理板 ● 配网终端通讯管理板 ● ARM Cortex™-A5 &#xff0c;533MHz ● 256MB RAM&#xff0c;512MB FLASH 配网终端通讯管理板 ARM Cortex™-A5 &#xff0c;533MHz 256MB RAM&#xff0c;512MB FLASH 2x10/100/1000Mbps LAN&#xff08;RJ45&#xff09; 6x…

B3958 [GESP202403 四级] 相似字符串

[GESP202403 四级] 相似字符串 题目描述 对于两个字符串 A A A 和 B B B&#xff0c;如果 A A A 可以通过删除一个字符&#xff0c;或插入一个字符&#xff0c;或修改一个字符变成 B B B&#xff0c;那么我们说 A A A 和 B B B 是相似的。 比如 apple \texttt{apple}…

Redis 内存回收

文章目录 1. 过期key处理1.1 惰性删除1.2 周期删除 2. 内存淘汰策略 Redis 中数据过期策略采用定期删除惰性删除策略结合起来&#xff0c;以及采用淘汰策略来兜底。 定期删除策略&#xff1a;Redis 启用一个定时器定时监视所有的 key&#xff0c;判断key是否过期&#xff0c;过…

深入理解Java多态:灵活性与可扩展性的完美结合

多态&#xff08;Polymorphism&#xff09;是面向对象编程&#xff08;Object-Oriented Programming, OOP&#xff09;的核心概念之一。多态性允许一个接口或方法适用于不同的对象类型&#xff0c;从而实现代码的重用性和灵活性。本文将深入探讨Java中的多态性&#xff0c;包含…

【JavaScript脚本宇宙】探索JavaScript拖放库世界:特性、示例与应用场景

解锁JavaScript拖放神器&#xff1a;库特性对比及最佳实践分享 前言 JavaScript拖放库在现代Web开发中扮演着重要角色&#xff0c;为用户提供了直观的交互体验。从基本的拖拽功能到复杂的多点触控手势&#xff0c;这些库使开发人员能够轻松地实现各种拖放效果&#xff0c;为网…

如何使用Python中的os模块进行文件和目录操作

Python中的os模块提供了许多与操作系统交互的函数&#xff0c;包括文件和目录操作。以下是一些使用os模块进行文件和目录操作的基本示例&#xff1a; 1. 获取当前工作目录 python复制代码 import os current_dir os.getcwd() print(current_dir) 2. 改变当前工作目录 pytho…