Unique Binary Search Trees
来源:互联网 发布:数学建模优化方法模型 编辑:程序博客网 时间:2024/06/03 21:32
设C0 = 1,只有一个元素时可行的BST数量C1 = 1,有两个元素时可行的BST数量C2 = 2 ,C3 = C0*C2 + C1*C1 + C2*C0 , C4 =......
这就是卡特兰数的定义。
所以用动态规划来做。
然而这种规律太难找了,我更倾向于寻找有启发性的思路。
因为对于每一个节点,只有两种状态:作为根节点或不作为根节点,有二分的思想,然而很明显这道题不能用二分法做,同时想到二分法和动态规划的相似点(见我的另一篇博客http://blog.csdn.net/popvip44/article/details/51704994),所以考虑用动态规划来做。
即:
n == 0 时,空树的个数必然为1,因此dp[0] = 1
n == 1 时,只有1这个根节点,数量也为1,因此dp[1] = 1
n == 2时,有两种构造方法,dp[2] = dp[0] * dp[1] + dp[1] * dp[0] (0为根节点,1为根节点)
n == 3时,dp[3] = dp[0] * dp[2] + dp[1] * dp[1] + dp[2] * dp[0] (0为根节点,2为子树根节点或者不为子树根节点; 1为根节点,因为1是mid位置,所以只有一种结构; 2为根节点,0为或不为子树根节点)
由卡特兰数计算公式得:
class Solution {public: int numTrees(int n) {if (n <= 0)return 0;if (n == 1)return 1;vector<int> res(n+1,0) ;res[0]=1;res[1]=1;for (int i = 2; i <=n; i++){for (int j = 0; j<i; j++){res[i] += res[j] * res[i - j-1];}}return res.back(); }};
0 0
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- 通过xcode生成ipa安装包
- angularjs的$on、$emit、$broadcast
- java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
- 解决ie8 css :nth-child(3n) 不兼容问题
- 详解 Android 通信
- Unique Binary Search Trees
- EditPlus的编码自动完成功能及配置文件下载
- Jackson框架的JsonGenerator、ObjectMapper - Json-lib框架的JsonObject、JsonArray
- shell 学习心得之awk篇
- 三叉哈夫曼树的分析
- properties文件简单读取
- 七月你好
- JAVA MAIL发送邮件实例
- 文档无法保存。读取文档时出现问题(135)