[LeetCode] Unique Binary Search Trees(!!DP)
来源:互联网 发布:redial 软件 编辑:程序博客网 时间:2024/05/23 16:54
Unique Binary Search Trees 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~n的解相加
对于根结点为i时,左儿子的可能性为根节点为i-1的子问题的解
右儿子的解为根结点为n-i的子问题的解。
class Solution {public: int numTrees(int n) { vector<int> v(n+1,1); vector<int> sum(n+1,0); sum[0]=1; getFac(n,v); for(int i = 1; i<=n; ++i) for(int j = 0; j<i; ++j) sum[i] +=( sum[j]*sum[i-1-j]); return sum[n]; } void getFac(int n, vector<int> &v){ int f=1; for(int i =1; i<=n; ++i){ f*=i; v[i]=f; } }};
这里相当于提前求解了n!的阶乘 ,虽然总的算法复杂度是O(n),但实际上这个是冗余的计算。
假设G(n)是长度为n的BST的总的数目,那么
G(n) = G(0) * G(n-1) + G(1) * G(n-2) + … + G(n-1) * G(0)
而G[0]=G[1]=1;
于是
public int numTrees(int n) { int [] G = new int[n+1]; G[0] = G[1] = 1; for(int i=2; i<=n; ++i) { for(int j=1; j<=i; ++j) { G[i] += G[j-1] * G[i-j]; } } return G[n];}
0 0
- 【Leetcode】Unique Binary Search Trees (DP)
- [LeetCode] Unique Binary Search Trees(!!DP)
- LeetCode-96-Unique Binary Search Trees DP
- leetcode 96. Unique Binary Search Trees (dp)
- DP Unique Binary Search Trees
- [DP] Unique Binary Search Trees
- LeetCode: Unique Binary Search Trees
- LeetCode : Unique Binary Search Trees
- [Leetcode] Unique Binary Search Trees
- [LeetCode]Unique Binary Search Trees
- LeetCode Unique Binary Search Trees
- Leetcode: Unique Binary Search Trees
- LeetCode-Unique Binary Search Trees
- [leetcode] Unique Binary Search Trees
- LeetCode - Unique Binary Search Trees
- [LeetCode] Unique Binary Search Trees
- 【Leetcode】Unique Binary Search Trees
- Leetcode: Unique Binary Search Trees
- 一个程序员的时间管理“辛”路历程
- 线程池
- 软件工程
- 最短路spfaPOJInvitation Cardsj解题报告
- C语言程序初体验-第十一课-第五题:角度转换
- [LeetCode] Unique Binary Search Trees(!!DP)
- 日经春秋 20150927
- 打打字,感受生活
- 搭建Windows渲染环境
- eclipse常用的几个快捷键
- HTML表单与PHP进行数据交互
- 数据解析/网络编程/图片异步下载KVO/初级数据持久化
- bfc ifc
- ssh 自动登陆的权限