LeetCode Unique Binary Search Trees--动态规划思想
来源:互联网 发布:mac一般用什么办公软件 编辑:程序博客网 时间:2024/06/08 18:00
题目:
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看到这道题的时候,能够想到的是递归,在递归的过程中发现会有重复的子问题,所以应该考虑动态规划,动态规划需要定义一个状态数组来保存子问题的解,并且解是按照从小到大的顺序依次求得,与递归不同。
是一道典型的动态规划题目,因为有重叠的子问题,当前决策依赖于子问题的解
设dp[i]表示共有i个节点时,能产生的BST树的个数
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]
n == 3时,构造方法如题目给的示例所示,dp[3] = dp[0] * dp[2] + dp[1] * dp[1] + dp[2] * dp[0]
同时,求d[n]时,共有根节点元素为 1, 2, 3, 4, 5, ..., i, ..., n这n种情况,结果为n种情况的和,从小到大计算,基于以下原则的BST树具有唯一性: d[i] = d[0]*d[i-1]+d[1]*d[i-2]...+d[i-1]*d[0]
class Solution {public: int numTrees(int n) { if(n == 0) return 1; if(n == 1) return 1; int* num = new int[n+1]; num[0] = 1; num[1] = 1; for(int i=2;i<=n;i++) { num[i] = 0; for(int j=1;j<=i;j++) { num[i] += num[j-1] * num[i-j]; } } int res = num[n]; delete[] num; return res; }};
0 0
- LeetCode Unique Binary Search Trees--动态规划思想
- leetcode-动态规划:Unique Binary Search Trees
- Unique Binary Search Trees (leetcode) 动态规划
- LeetCode 95. Unique Binary Search Trees II&96. Unique Binary Search Trees--动态规划,二叉树
- LeetCode题目:Unique Binary Search Trees,一维动态规划
- LeetCode —— Unique Binary Search Trees [动态规划]
- LeetCode Unique Binary Search Trees动态规划方法详解
- 96.leetcode Unique Binary Search Trees(meidum)[动态规划]
- [leetcode-动态规划]--96. Unique Binary Search Trees
- Unique Binary Search Trees [动态规划]
- 96. Unique Binary Search Trees 动态规划
- (Leetcode 95+96)Unique Binary Search Trees 动态规划 分治
- leetcode 95. Unique Binary Search Trees II-分治算法|动态规划|卡特兰数
- 动态规划——Unique Binary Search Trees 独一无二的二叉搜索树【LeetCode】
- 96. Unique Binary Search Trees 类别:动态规划 难度:medium
- 动态规划专题之---- Unique Binary Search Trees
- 动态规划中级教程 96. Unique Binary Search Trees
- LeetCode: Unique Binary Search Trees
- 1407231857-hd-Problem A .cpp
- hdu 2196 树形dp
- poj2796--Feel Good(单调栈求区间问题)
- c 多线程,多进程 学习
- github manual
- LeetCode Unique Binary Search Trees--动态规划思想
- WebDriver支持多浏览器
- 将Asp.Net网站发布到IIS的四种方法及注意事项
- 云计算相关术语
- 写入txt 中文
- 【服务器架构】Skynet 设计综述
- 2013蓝桥杯预选:第39阶台阶
- Socket 服务器端 简单实例
- font-size:100%