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
BST树的定义:根节点左边所有节点的值小于根节点值,右边所有节点的值大于根节点的值,然后其左右子树又是BST

思路:例如序列:1,2,3,4,5

第一个数字的左边有0个数字,右边4个数字  dp[0]*dp[4]

第二个数字的左边有1个数字,右边3个数字  dp[1]*dp[3]

第三个数字的左边有2个数字,右边2个数字  dp[2]*dp[2]

第四个数字的左边有3个数字,右边1个数字  dp[3]*dp[1]

第五个数字的左边有4个数字,右边0个数字  dp[4]*dp[0]

所以我们要求的dp[5]就等于上面加起来的和,这里我们得假设dp[0]=1;

其实就是每个数字来当根节点,具体如下图所示


代码:
class Solution{
public:
int numTrees(int n) {
if(n<=) return n;
vector<int> dp(n+,); dp[]=;
for(int i=;i<=n;++i){
int temp=;
for (int j=;j<=i;++j)
{
temp+=dp[j-]*dp[i-j];
}
dp[i]=temp;
}
return dp[n];
}
};

最新文章

  1. 《Ansible权威指南》笔记(2)——Inventory配置
  2. 开发错误记录13:java.lang.UnsatisfiedLinkError: Couldn't load xxx.so: findLibrary returned null
  3. Spring AOP配置文件
  4. opencv 手写选择题阅卷 (一)表格设计与识别
  5. js模仿jquery里的几个方法next, pre, nextAll, preAll
  6. 获取通讯录的信息(关于iOS9.0之后新的框架-ContactFramework)
  7. jsp页面使用jstl标签格式化String类型日期
  8. 一个月AS2.0总结。
  9. 纯CSS3编写的面包屑导航收集
  10. wx.Frame
  11. 关于安卓HTTP请求用HttpUrlConnection还是HttpClient好
  12. HQL连接查询和注解
  13. Linux系统中yum 命令讲解
  14. js基本概述
  15. Mac下vim7.4+vimgdb让vim支持gdb源码调试
  16. 理解jsonp劫持漏洞
  17. Netty实战四之传输
  18. C#设计模式(3)——抽象工厂模式
  19. Android 其他特效展示
  20. python+rabbitMQ实现生产者和消费者模式

热门文章

  1. Qt窗口-仅显示关闭按钮
  2. xcode uml 工具
  3. linux centos 中目录结构的含义
  4. Bug的定义和分类
  5. node程序的部署神器pm2的基本使用
  6. 全局/局部变量、宏、const、static、extern
  7. 洛谷——P1640 [SCOI2010]连续攻击游戏
  8. Global Round 2
  9. [JOYOI] 1096 数字组合
  10. 【转载】form表单的两种提交方式,submit和button的用法