Given n, how many structurally unique BST's (binary search trees) that store values 1...n?
For example,
Given n = 3, there are a total of 5 unique BST's.
1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3https://oj.leetcode.com/problems/unique-binary-search-trees/
看很多人的解答直接利用Catalan Number的结论,写的推论也不是很清晰,所以我在这里补充一下为什么用Catalan Number的推理过程方便大家:
题目的条件是Given n,求unique BST树的个数。题目给的例子可以大概猜出是DP问题,那么可以如下分析:
对于Given n = 3的情况,那么可以将最终的解分解为的当根节点分别是1, 2, 3的情况;又由于题目问的是求unique BST,那么满足条件的BST应该满足中序遍历(in-order traverse)之后得出递增序列。
Given n = 3 Value = {1, 2, 3} Let C(n) be numbers of Unique BST with given n. Root: 1 2 3 / \ / \ / \ C(0) C(2) C(1) C(1) C(2) C(0) C(3) = C(0)*C(2) + C(1)*C(1) + C(2)*C(0) Similarly, given n = 4 Value = {1, 2, 3, 4} Root: 1 2 3 4 / \ / \ / \ / \ C(0) C(3) C(1) C(2) C(2) C(0) C(3) C(0) C(4) = C(0)*C(3) + C(1)*C(2) + C(2)*C(1) + C(3)*C(0)
初始状态C(0) = 1;
那么这个问题就可以简化为维护一个长度为n的数组res[],返回值是数组res[n-1]。
空间复杂度为O(n),时间复杂度为O(n^2)
这道题还可以直接用卡塔兰数的定义来做,空间复杂度O(1),时间复杂度O(n)