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

算法leetcode|96. 不同的二叉搜索树(多语言实现)


文章目录

  • 96. 不同的二叉搜索树:
    • 样例 1:
    • 样例 2:
    • 提示:
  • 分析:
  • 题解:
    • rust:
    • go:
    • c++:
    • python:
    • java:


96. 不同的二叉搜索树:

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

样例 1:

输入:n = 3输出:5

样例 2:

输入:n = 1输出:1

提示:

  • 1 <= n <= 19

分析:

  • 面对这道算法题目,二当家的再次陷入了沉思。
  • 要穷举所有可能不同的二叉搜索树,每个节点需要遍历 1n
  • 由于每棵树的左右子树同样也是树,使用递归套娃大法就非常直观,将问题不断分解成子问题,比循环简单。
  • 二叉搜索树本身有着一些限制,左子树所有的节点不大于自己,右子树所有的节点不小于自己,所以当确定父节点的值之后,子树的取值范围也可以确定,并且取值范围会缩小,这就有了递归回归的条件。
  • 将每个节点都在范围内遍历,每次遍历都去生成所有可能的左右子树,再将所有可能的左子树和可能的右子树分别组合就是结果。
  • 但是这是将所有二叉搜索树本身穷举出来,而题目只是要求返回数量即可,会不会有更简单的方式?
  • 想想二叉搜索树的定义,由于所有节点都是不同的,所以就和具体值无关,只和节点数量有关,那么就可以转化为一个数学问题,从1个节点开始计算,此时只会有一种树(参看百科 卡特兰数 )。

题解:

rust:

impl Solution {pub fn num_trees(n: i32) -> i32 {// 提示:我们在这里需要用 i64 类型防止计算过程中的溢出let mut c = 1i64;(0..n as i64).for_each(|i| {c = c * 2 * (2 * i + 1) / (i + 2);});return c as i32;}
}

go:

func numTrees(n int) int {c := 1for i := 0; i < n; i++ {c = c * 2 * (2*i + 1) / (i + 2)}return c
}

c++:

class Solution {
public:int numTrees(int n) {long long c = 1;for (int i = 0; i < n; ++i) {c = c * 2 * (2 * i + 1) / (i + 2);}return (int) c;}
};

python:

class Solution:def numTrees(self, n: int) -> int:c = 1for i in range(0, n):c = c * 2 * (2 * i + 1) / (i + 2)return int(c)

java:

class Solution {public int numTrees(int n) {// 提示:我们在这里需要用 long 类型防止计算过程中的溢出long c = 1;for (int i = 0; i < n; ++i) {c = c * 2 * (2 * i + 1) / (i + 2);}return (int) c;}
}

非常感谢你阅读本文~
欢迎【点赞】【收藏】【评论】三连走一波~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~


http://www.dtcms.com/a/516895.html

相关文章:

  • 快速上手ip link命令:查看你的网络接口信息
  • 视频汇聚平台EasyCVR级联播放偶发失败排查:TCP主动模式下的3秒超时响应差
  • 苏州马可波罗网站建设wordpress单页主题制作视频教程
  • html手机网站怎么做清新织梦淘宝客模板淘客网站程序源码
  • 20.2 图像识别技术革命:多模态模型准确率突破87.6%,传统方案效率飙升32%!
  • 深圳网站建设加盟网站 方案
  • ★ Linux ★ 线程概念与控制
  • 设计师接私单做网站为什么打不开建设银行网站
  • 前端-登录认证技术
  • AI开发结构化输出
  • Leetcode 32
  • eclipse tomcat运行普通web项目发现mysql-connector-java-8.0.30.jar包无法自动部署 的解决办法
  • 【经典算法,限时免费】LeetCode698、划分K个相等的子集(回溯解法)
  • 做网站为职业生存不下去nginx wordpress rewrite
  • RK3568 MIPI 摄像头驱动的 V4L2 多平面视频格式解析
  • 英伟达RTX 6000 Ada 和L40S 对比,哪个更适合做深度学习?
  • 网站开发维护费用学校网站建设工作
  • 华为专利申请的核心指导思想
  • 做配资网站多少钱我想花钱做网站
  • 自适应单行tooltip省略号
  • 网站难做jquery+html5 网站后台管理页面模板
  • 做seo网站 公司三丰云服务器
  • 关于监控与部署
  • 3.虚拟化技术(一)
  • CentOS x86_64架构下载aarch64(arm64)包
  • VMware 中遇到“没有检测到磁盘”的问题
  • 做外贸如何分析客户网站wordpress怎么选主题
  • 操作系统—内存管理(1)
  • 基线设计(Baseline Design)全流程拆解(二)
  • 沃尔玛、eBay测评自养号技术解析:从策略到实践