LeetCode之Unique Binary Search Trees
来源:互联网 发布:网络电视机介绍 编辑:程序博客网 时间:2024/05/22 10:56
毕业快一年了,算法相关的知识也快忘了差不多了。工作过程中,产品知识最重要,其次是代码的设计。算法的重要性几乎体现不出来。
最近忙里偷闲,在LeetCode OJ上闲逛, 打算把AC Rate >= 30%的题先A掉。
Unique Binary Search Trees 这道题AC非常高,题目是这样的,
Given n, how many structurally unique BST's (binary search trees) that store values 1...n?
直觉上应该用递归,或者是动态规划。
下面是思路:
设U(1, 2, ..., n)代表存储1...n的binary search tree的数目。dp(i, n-1)代表以i为根,包含n-1个子结点的二叉树数目。
U(1, 2, ..., n) = dp(1, n-1) + dp(2, n-1) + ... dp(n, n-1).
Clearly, dp(i, n-1) = U(1, 2, ..., i-1) * U(i+1, i+2, ..., n),
and U(i+1, i+2, ..., n) = U(1, 2, ..., n-i).
Thus, dp(i, n-1) = U(1, 2, ..., i-1) * U(1, 2, ..., n-i).
不妨简记U(n) = U(1, 2, ..., n), 那么
U(n) = U(0)*U(n-1) + U(1)*U(n-2) + ... + U(i-1)*U(n-i) + ... + U(n-1)*U(0), 1 <= i <=n.
Example.
U(0) = 1
U(1) = 1
U(2) = dp(1, 1)+dp(2, 1) = U(0)*U(1) + U(1)*U(0) = 2
U(3) = dp(1, 2)+dp(2, 2)+dp(3, 2) = U(0)*U(2) + U(1)*U(1) + U(2)*U(0) = 2 + 1 + 2 = 5
代码如下:
int rNumTrees(int n, int *U, int len) { if(U[n] != -1)return U[n]; U[n] = 0; for(int i = 1; i <= n; ++i) U[n] += rNumTrees(i-1, U, len) * rNumTrees(n-i, U, len); return U[n]; } int numTrees(int n) { if(n == 0 || n == 1)return 1; int *U = new int[n+1]; memset(U, -1, sizeof(int)*(n+1)); U[0] = U[1] = 1; int res = rNumTrees(n, U, n+1); delete []U; return res; }
- 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 II
- 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
- Windows Mobile与Windows CE的区别
- 对CSS 框架的一些借鉴学习
- 简单数据结构之链表(无头节点)
- 对象的回收机制深度剖析
- C 程序可移植性_legend
- LeetCode之Unique Binary Search Trees
- 禅道——关于写测试使用文档
- 网站排名优化,有技术还得有技巧
- xcode5 删除多余证书
- 黑马程序员学习日记(2)——文件批量重命名程序:One Click实现BLL层与UI层各个部分的交互
- hive merge小文件
- IOS获取屏幕分辨率
- 错误org.hibernate.HibernateException: Error applying BeanValidation relational constraints的解决方法
- [杭电]Number Sequence