原文链接: https://leetcode-cn.com/problems/unique-binary-search-trees
英文原文
Given an integer n
, return the number of structurally unique BST's (binary search trees) which has exactly n
nodes of unique values from 1
to n
.
Example 1:
Input: n = 3 Output: 5
Example 2:
Input: n = 1 Output: 1
Constraints:
1 <= n <= 19
中文题目
给你一个整数 n
,求恰由 n
个节点组成且节点值从 1
到 n
互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
示例 1:
输入:n = 3 输出:5
示例 2:
输入:n = 1 输出:1
提示:
1 <= n <= 19
通过代码
高赞题解
解题思路
- 标签:动态规划
- 假设 n 个节点存在二叉排序树的个数是 G (n),令 f(i) 为以 i 为根的二叉搜索树的个数,则
$G(n) = f(1) + f(2) + f(3) + f(4) + … + f(n)$
- 当 i 为根节点时,其左子树节点个数为 i-1 个,右子树节点为 n-i,则
$f(i) = G(i-1)*G(n-i)$
- 综合两个公式可以得到 卡特兰数 公式
$G(n) = G(0)G(n-1)+G(1)(n-2)+…+G(n-1)*G(0)$
代码
class Solution {
public int numTrees(int n) {
int[] dp = new int[n+1];
dp[0] = 1;
dp[1] = 1;
for(int i = 2; i < n + 1; i++)
for(int j = 1; j < i + 1; j++)
dp[i] += dp[j-1] * dp[i-j];
return dp[n];
}
}
画解
<,,,,,,>
想看大鹏画解更多高频面试题,欢迎阅读大鹏的 LeetBook:《画解剑指 Offer 》,O(∩_∩)O
统计信息
通过次数 | 提交次数 | AC比率 |
---|---|---|
179137 | 256186 | 69.9% |
提交历史
提交时间 | 提交结果 | 执行时间 | 内存消耗 | 语言 |
---|
相似题目
题目 | 难度 |
---|---|
不同的二叉搜索树 II | 中等 |