LeetCode 96. Unique Binary Search Trees
2016-07-22 01:21
591 查看
96.
Unique Binary Search Trees
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
二分查找树的定义是,左子树节点均小于root,右子树节点均大于root~~~
所以可以用递推的方法,把v[i]表示i个数能够构成的二叉搜索树的个数~~
初始化边界值是
v[0]=1,v[1]=1,v[2]=2~~~
当i>=3的时候,若以j为root结点,v[j-1]等于root结点左边的j-1个结点能构成的BST个数~~
v[i-j]等于root结点右边i-j个结点能构成的BST个数~//j+1~i的种数和0~i-j的种数一样。。所以就是v[i-j]~
所以v[j-1]
* v[i-j]等于以j为root结点能构成的BST种数~~~
j可以取1~i中的任意一个值,把这些所有计算出来的总数相加就是v[i]的值~~~~
所以
for(int j = 1; j <= i; j++) {
v[i]
+= v[j-1] * v[i-j];
}
最后返回的值是v
的值,表示1~n能组成的BST的个数~~~~
Unique Binary Search Trees
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
二分查找树的定义是,左子树节点均小于root,右子树节点均大于root~~~
所以可以用递推的方法,把v[i]表示i个数能够构成的二叉搜索树的个数~~
初始化边界值是
v[0]=1,v[1]=1,v[2]=2~~~
当i>=3的时候,若以j为root结点,v[j-1]等于root结点左边的j-1个结点能构成的BST个数~~
v[i-j]等于root结点右边i-j个结点能构成的BST个数~//j+1~i的种数和0~i-j的种数一样。。所以就是v[i-j]~
所以v[j-1]
* v[i-j]等于以j为root结点能构成的BST种数~~~
j可以取1~i中的任意一个值,把这些所有计算出来的总数相加就是v[i]的值~~~~
所以
for(int j = 1; j <= i; j++) {
v[i]
+= v[j-1] * v[i-j];
}
最后返回的值是v
的值,表示1~n能组成的BST的个数~~~~
class Solution { public: int numTrees(int n) { vector<int> v(n+1); v[0] = 1; for(int i = 1; i <= n; i++) { v[i] = 0; if(i <= 2) { v[i] = i; } else { for(int j = 1; j <= i; j++) { v[i] += v[j-1] * v[i-j]; } } } return v ; } };
相关文章推荐
- LeetCode 300. Longest Increasing Subsequence
- LeetCode 304. Range Sum Query 2D – Immutable
- UITableView修改索引的方法
- ionic生成apk使用build命令下载gradle-2.2.1-all.zip卡,解决方案
- LeetCode 51. N-Queens
- LeetCode 52. N-Queens II
- php学习笔记之require()和include()
- HashMap按value的顺序输出
- 用vue创建hello world,不用再担心显示message了
- 使用PortableBasemapServer 和 terrabuilder 制作MPT
- Lucene3.X中的自定义评分机制
- Lucene4.X中的自定义评分机制
- 【Arduino官方教程】数字处理示例(六):音调键盘
- Leetcode Unique Paths II
- EasyUI综合布局Layout二.银行后台局部实现模仿
- EasyUI综合布局Layout二.银行后台局部实现模仿
- EasyUI综合布局Layout二.银行后台局部实现模仿
- Subsequence Weighting
- ACM--学生排队--HDOJ 1297--Children’s Queue--大数
- iOS开发小技巧--即时通讯项目:消息发送框(UITextView)高度的变化; 以及UITextView光标复位的小技巧