[题解][Leetcode][Unique Binary Search Trees]
2014-07-15 14:36
483 查看
题目:
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.
思路:
看到题目,就感觉应该会有递推公式。于是,画出n=1,2,3的情况进行分析。
发现,n=2到n=3,其实就是寻找摆放3的位置。
3种情况:
1. 根为3
把3直接接在所有2的情况的上面,作为根,数量:2
2. 最右为3
把3直接接在所有2的情况的最右边,数量:2
3. 插入3
再分析可以发现,3只插入到从跟节点开始的最右路径上。
1 2
\ /
2 1
只有左边的符合,数量:1
所以3的种类是5.
推广到n=4的情况:
1. 根为4 f(n-1)=5
2. 最右为4 f(n-1)=5
3. 插入4 14种。
1234 124 134 14(*2)
234 24
34(*2)
但是困难就在这里了,如何计算“插入4”这种情况的总数?.......
卡住了,换思路。
==============================================
题解:
动态规划DP
n=1 ans = 1
n=2 ans = 2
n>=3 考虑根节点的可能情况,为n种,对于每一种根,分别考虑左右子树可能的情况数,相乘等到该根节点的情况总数,将n个根节点情况总数相加即可。
AC.
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 3
思路:
看到题目,就感觉应该会有递推公式。于是,画出n=1,2,3的情况进行分析。
发现,n=2到n=3,其实就是寻找摆放3的位置。
3种情况:
1. 根为3
把3直接接在所有2的情况的上面,作为根,数量:2
2. 最右为3
把3直接接在所有2的情况的最右边,数量:2
3. 插入3
再分析可以发现,3只插入到从跟节点开始的最右路径上。
1 2
\ /
2 1
只有左边的符合,数量:1
所以3的种类是5.
推广到n=4的情况:
1. 根为4 f(n-1)=5
2. 最右为4 f(n-1)=5
3. 插入4 14种。
1234 124 134 14(*2)
234 24
34(*2)
但是困难就在这里了,如何计算“插入4”这种情况的总数?.......
卡住了,换思路。
==============================================
题解:
动态规划DP
n=1 ans = 1
n=2 ans = 2
n>=3 考虑根节点的可能情况,为n种,对于每一种根,分别考虑左右子树可能的情况数,相乘等到该根节点的情况总数,将n个根节点情况总数相加即可。
class Solution: # @return an integer def numTrees(self, n): ans = [1,1,2,5] if n > 3: for i in range(4,n+1): ans.append(0); for j in range(0,i): ans[i] += ans[j]*ans[i-j-1] return ans
AC.
相关文章推荐
- LeetCode题解——Unique Binary Search Trees
- LeetCode题解:Unique Binary Search Trees
- 【LeetCode】【Python题解】Unique Binary Search Trees
- LeetCode题解:Unique Binary Search Trees II
- LeetCode题解:Unique Binary Search Trees
- [LeetCode]题解(python):095-Unique Binary Search Trees II
- LeetCode题解:Unique Binary Search Trees
- [LeetCode]题解(python):096-Unique Binary Search Trees
- LeetCode题解——Unique Binary Search Trees II
- 【题解】【BST】【Leetcode】Unique Binary Search Trees
- LeetCode - Unique Binary Search Trees
- 【leetcode】unique-binary-search-trees
- leetcode--Unique Binary Search Trees
- [leetcode] 95. Unique Binary Search Trees II
- Unique Binary Search Trees II [Leetcode 解题报告]
- LeetCode 96:Unique Binary Search Trees
- leetcode[95]Unique Binary Search Trees II
- LeetCode Unique Binary Search Trees II
- Unique Binary Search Trees - LeetCode
- [LeetCode] [Unique Binary Search Trees 2012-08-27]