首页 > 其他分享 >LeetCode - #96 不同的二叉搜索树(Top 100)

LeetCode - #96 不同的二叉搜索树(Top 100)

时间:2024-07-15 20:57:00浏览次数:12  
标签:val 示例 Top LeetCode 100 Swift public dp

在这里插入图片描述
在这里插入图片描述

文章目录

前言

本题为 LeetCode 前 100 高频题

我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。

LeetCode 算法到目前我们已经更新到 94 期,我们会保持更新时间和进度(周一、周三、周五早上 9:00 发布),每期的内容不多,我们希望大家可以在上班路上阅读,长久积累会有很大提升。

不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。

难度水平:中等

1. 描述

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

2. 示例

示例 1

输入:n = 3
输出:5

示例 2

输入:n = 1
输出:1

约束条件:

  • 1 <= n <= 19

3. 答案

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     public var val: Int
 *     public var left: TreeNode?
 *     public var right: TreeNode?
 *     public init(_ val: Int) {
 *         self.val = val
 *         self.left = nil
 *         self.right = nil
 *     }
 * }
 */

class UniqueBinarySearchTrees {
    func numTrees(_ n: Int) -> Int {
        guard n > 1 else {
            return 1
        }
        
        var dp = Array(repeating: 0, count: n + 1)
        dp[0] = 1
        
        for i in 1...n {
            for j in 0..<i {
                dp[i] += dp[j] * dp[i - j - 1]
            }
        }
        
        return dp[n]
    }
}
  • 主要思想:动态规划,对于每个节点为根,dp[i] += dp[j] * dp[i - j - 1]
  • 时间复杂度: O(n^2)
  • 空间复杂度: O(n)

该算法题解的仓库:LeetCode-Swift

点击前往 LeetCode 练习

关于我们

我们是由 Swift 爱好者共同维护,我们会分享以 Swift 实战、SwiftUI、Swift 基础为核心的技术内容,也整理收集优秀的学习资料。

标签:val,示例,Top,LeetCode,100,Swift,public,dp
From: https://blog.csdn.net/qq_36478920/article/details/140448921

相关文章

  • Python从0到100(三十九):数据提取之正则(文末免费送书)
    前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知......
  • Python从0到100(四十):Web开发简介-从前端到后端(文末免费送书)
    前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知......
  • leetcode刷题笔记
    11妙用数据结构11.2数组448找到所有数组中消失的数字//方法1//1.使用一个数组的下标记录每个对应数字出现的次数//2.遍历数组,根据值为0的元素所在的下标确定没有出现过的数字std::vector<int>findDisappearedNumbers(std::vector<int>&nums){std::vector<in......
  • htmlToPdf处理视频
    一个写好的html页面要打印pdf,其中有视频也有图片。参考了网上的一些方法,最终是在获取数据的时候,对视频进行了截取第一帧处理。getFirstImgBase64(){this.piclist.forEach(item=>{if(item.url.endsWith('.mp4')){letdataURL=""letvideo=document.......
  • 《昇思25天学习打卡营第06天|qingyun201003》
    日期心得什么是函数式自动微分,在日常的模型训练中,涉及到复杂的数学公式如何转换为机械语言,通过本次的学习,使我了解到了如何去做梯度计算,通过梯度计算,设计损失函数,有一步步优化代码。昇思MindSpore基础入门学习函数式自动微分(AI代码解析)函数式自动微分神经网络的......
  • Leetcode【编辑距离】
    72.编辑距离给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数  。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1="horse",word2="ros"输出:3解释:horse->rorse(将'h'替换为......
  • torch topk 使用
    torchtopk使用这个函数是用来求tensor中某个dim的前k大或者前k小的值以及对应的index。用法torch.topk(input,k,dim=None,largest=True,sorted=True,out=None)->(Tensor,LongTensor)input:一个tensor数据k:指明是得到前k个数据以及其indexdim:指定在哪个维度上排......
  • Equal Cut (AtCoder - arc100_b)(前缀和,思维)
    题目来源:https://atcoder.jp/contests/abc102/tasks/arc100_b?lang=en//题意:将一串数字分为四段,求出每段的总和,怎么分,才能让这四段的各自总和的极差最小?//思路:“实在是想不出来好的算法,只会暴力,当时想的枚举中间的那一刀,然后左右二分,但是感觉也不太好写,毕竟我总是被二分的边界......
  • LeetCode 1530. Number of Good Leaf Nodes Pairs
    原题链接在这里:https://leetcode.com/problems/number-of-good-leaf-nodes-pairs/description/题目:Youaregiventhe root ofabinarytreeandaninteger distance.Apairoftwodifferent leaf nodesofabinarytreeissaidtobegoodifthelengthof thesh......
  • 1100. 抓住那头牛
    //1100.抓住那头牛.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。//#include<iostream>#include<queue>#include<map>usingnamespacestd;/*https://www.acwing.com/problem/content/1102/农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴......