题目:

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

代码:

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

tips:

1. ‘左子树可能数*右子树可能数’为所有以元素i为根节点的BST个数。

2. 如果总个数是n,则把根节点为1~n的情况都累加一遍,就是不重复的BST个数(由于要用到之前的计算结果,因此一维dp很合适)

===========================================

第二次过这道题,这题其实放DP里更好一些。

注意初始化的时候,一般都初始化为0。dp[0] dp[1]特殊处理。

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

【Unique Binary Search Trees】cpp的更多相关文章

  1. 【二叉查找树】01不同的二叉查找树的个数【Unique Binary Search Trees】

    当数组为1,2,3,4,...,n时,基于以下原则构建的BST树具有唯一性: 以i为根节点的树,其左子树由[1,i-1]构成,其右子树由[i+1, n]构成. 我们假定f(i)为以[1,i]能产生的U ...

  2. 【Unique Binary Search Trees II】cpp

    题目: Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. F ...

  3. 【二叉查找树】02不同的二叉查找树个数II【Unique Binary Search Trees II】

    提到二叉查找树,就得想到二叉查找树的递归定义, 左子树的节点值都小于根节点,右子树的节点值都大于根节点. +++++++++++++++++++++++++++++++++++++++++++++++ ...

  4. 【Validate Binary Search Tree】cpp

    题目: Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is define ...

  5. 【Recover Binary Search Tree】cpp

    题目: Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without chan ...

  6. CF1237E 【Balanced Binary Search Trees】

    首先我们要注意到一个性质:由于根与右子树的根奇偶性相同,那么根的奇偶性与\(N\)相同 然后我们发现对于一个完美树,他的左右两个儿子都是完美树 也就是说,一颗完美树是由两棵完美树拼成的 注意到另一个性 ...

  7. 【一天一道LeetCode】#96. Unique Binary Search Trees

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given n ...

  8. 【LeetCode】95. Unique Binary Search Trees II 解题报告(Python)

    [LeetCode]95. Unique Binary Search Trees II 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzh ...

  9. 【LeetCode】95. Unique Binary Search Trees II

    Unique Binary Search Trees II Given n, generate all structurally unique BST's (binary search trees) ...

随机推荐

  1. 实现在Android开发中的Splash Screen开场屏的效果

    很多网友可能发现近期Tencent推出的手机QQ Android版包含了一个开场屏Splash Screen载入效果,通常游戏或大型软件打开时可能需要一个释放解析资源的过程,需要一个前台的动画播放和后 ...

  2. 自定义控件winfrom

    附件代码:http://files.cnblogs.com/files/qtiger/CompositeControl.zip 转载:http://www.cnblogs.com/bomo/archi ...

  3. DataGridView取消默认选中行

    DataGridView在添加数据后会默认选中第 一个单元格或者第一行,我就想取消它的默认选中行.在DataGridView绑定数据之后加上了ClearSelection().这样一来,不论是启动窗体 ...

  4. 最简单删除SQL Server中所有数据的方法

     最简单删除SQL Server中所有数据的方法 编写人:CC阿爸 2014-3-14 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间 ...

  5. 封装js千分位加逗号和删除逗号

    //封装js千分位加逗号和删除逗号 alert( format(2545678754.020001) ) //2,545,678,754.03 alert( format(-2545678754.02 ...

  6. 文本处理命令--cut、sort、join

    声明:下面介绍的只是命令的常用选项,如果需要详细了解命令全部细节,需要参考其他的资料. 一.cut cut是一个选取命令,就是将一段数据经过分析,取出我们想要的.一般来说,选取信息通常是针对“行”来进 ...

  7. Navicat Premium 11 For Mac 注册机

    http://mac.pcbeta.com/thread-138357-1-1.html

  8. 怎么做QQ、微信等消息气泡

    主XML: <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android ...

  9. 解析 this.initialize.apply(this, arguments)

    一. 起因 那天用到prototype.js于是打开看看,才看几行就满头雾水,原因是对js的面向对象不是很熟悉,于是百度+google了一把,最后终于算小有收获,写此纪念一下^_^. prototyp ...

  10. andoroid项目使用Javah找不到class问题

    比如目录结构是:Soffice\bin\classes\cn\com\isoffice\util\SofficeWebService.class 进入到bin/classes 下使用命令 javah ...