LeetCode 96 Unique Binary Search Tree(Python详解及实现)
来源:互联网 发布:石家庄seo博客 编辑:程序博客网 时间:2024/05/19 20:43
【题目】
Given an integer n, generate allstructurally unique BST's (binary search trees) that store values 1...n.
For example,
Given n = 3, your program should return all5 unique BST's shown below.
1 3 3 2 1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3
这道题与94题类似,94题求得是符合条件的二叉树的棵树,这题是返回所有符合条件的二叉查找树。
【思路】
动态规划求解:
问题的状态转移方程怎么求呢?大部分动态规划的难点都是求状态转移方程。
n=0时,为空树,----> dp[0]=1;
n=1时, dp[1]=1;
n=2时,dp[2]=2;
n>2时,dp[n]=dp[0]*dp[n-1]+dp[1]*dp[n-2]+......+dp[n-1]*dp[0];
【Python实现】
#动态规划迭代求解
class Solution(object): def numTrees(self, n): """ :type n: int :rtype: int """ dp = [1, 1, 2] if n < 3: return dp[n] dp += [0 for i in range(n-2)] for i in range(3, n+1): for j in range(i): dp[i] += dp[j]*dp[i-j-1] return dp[n]if __name__ == '__main__': S= Solution() res = S.numTrees(3) print(res)
#递归求解
class Solution(object): def numTrees(self, n): """ :type n: int :rtype: int """ dp = [1, 1, 2] if n < 3: return dp[n] ans = 0 for i in range(n): ans += self.numTrees(i)*self.numTrees(n-i-1) return ans if __name__ == '__main__': S= Solution() res = S.numTrees(3) print(res)
阅读全文
0 0
- LeetCode 96 Unique Binary Search Tree(Python详解及实现)
- LeetCode 95 Unique Binary Search Tree II(Python详解及实现)
- LeetCode 98 Validate Binary Search Tree(Python详解及实现)
- LeetCode 99 Recover Binary Search Tree(Python详解及实现)
- LeetCode 96: Unique Binary Search Tree
- leetCode 96:Unique Binary Search Tree
- LeetCode #96 Unique Binary Search Tree
- [LeetCode] Unique Binary Search Tree
- LeetCode : Unique Binary Search Tree
- 【LeetCode】Unique Binary Search Tree
- [Leetcode]Unique binary search tree
- Unique Binary Search Tree -- LeetCode
- Leetcode: Unique Binary Search Tree II
- Leetcode - Tree /Dynamic Programming- Unique Binary Search
- Leetcode练习- Unique Binary Search Tree
- leetcode java unique binary search tree
- 【Leetcode】Unique Binary Search Tree II (DP)
- 【Leetcode】Unique Binary Search Tree in JAVA
- hdu 2087 剪花布条 (KMP)
- 大数据学习笔记:YARN框架分析之事件的分发与状态机
- Building workspace has encountered a problem. Errors during build.
- MySQL命令行导出数据库
- linux下的查找命令
- LeetCode 96 Unique Binary Search Tree(Python详解及实现)
- flexbox布局实例
- HDU 4786
- 查看Linux系统是否使用RAID阵列信息
- HTTP协议介绍
- yue
- mysql oracle Hibernate 的分页
- 静态代理模式和JDk提供的动态代理类java.lang.reflect.Proxy
- mysql数据库的优化整理之服务器优化