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

【代码随想录day24】不同的二叉搜索树

题目 

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

示例 1:

输入:n = 3
输出:5

示例 2:

输入:n = 1
输出:1

提示:

  • 1 <= n <= 19

代码 

定义dp[i]为由i个节点组成的二叉排序树有dp[i]种。

我们可以从节点数i为2开始遍历,每次遍历分别用j表示根节点左子树有j个节点,那对应右子树就有i-j-1个节点,那么左右子树分别能够组成的二叉排序树就是dp[j]和dp[i-j-1]种 ,j的取值范围是从0到i-1。题目要求的就是dp[j]*dp[i-j-1]。

这里当左右子树有为空的时候,我们应该把他当成1,不然dp[j]*dp[i-j-1]就是0了,但这种情况也是合理的,因此处理一下得到:dp[i]+=max(1,dp[j])*max(1,dp[i-j-1])。

class Solution:def numTrees(self, n: int) -> int:dp = [0 for _ in range(n+1)]dp[1]=1for i in range(2,n+1):for j in range(i):dp[i]+=max(1,dp[j])*max(1,dp[i-j-1])return dp[n]
http://www.lryc.cn/news/156702.html

相关文章:

  • 数学建模--Subplot绘图的Python实现
  • JMeter(三十九):selenium怪异的UI自动化测试组合
  • c++ 移动构造方法为什么要加noexcept
  • 鸿鹄工程项目管理系统 Spring Cloud+Spring Boot+前后端分离构建工程项目管理系统
  • 手把手教你搭建园林园艺小程序商城
  • Java Iterator(迭代器)
  • Logstash同步MySQL数据到ElasticSearch
  • 【C++】运算符重载的示例实现和应用
  • Kubernetes禁止调度
  • CocosCreator3.8研究笔记(七)CocosCreator 节点和组件的介绍
  • Ceph入门到精通-C++入门知识点
  • Ansible之playbook详解和应用实例
  • 经验萃取方法
  • 手写apply方法
  • Jenkins实现基础CD操作
  • 开源软件合集(Docker)
  • Ceph入门到精通-生产日志级别设置
  • 16-MyCat
  • RKNPU2通用API和零拷贝API
  • LeetCode 1123. 最深叶节点的最近公共祖先:DFS
  • 多线程应用——线程池
  • OPENCV+QT环境配置
  • Kafka3.0.0版本——文件清理策略
  • SRT参数说明
  • vue响应式原理
  • elk安装篇之 Kibana安装
  • MySQL 用户授权管理及白名单
  • pc-签字画板vue-esign的使用
  • javaScript:节点操作
  • git 忽略已经提交的文件或文件夹 (修改.gitignore文件无效)