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该题是给出总数,该题之前的题目是返回所有结果,使用返回结果代码的递归算法,然后计算结果数一定会超时的;所以不能使用递归算法了,就只能使用动态规划了。
在递归算法中我们可以得出规律,计算得到本层节点为跟节点的排序子树的个数N,需要求其左子树个数 lNums 和右子树个数 rNums,其中
N = lNums * rNums
由此规律可以得到
F[begin][end] = 求和 ( F[begin][j-1] * F[j+1][end] ) ;(j = begin,begin+1,begin+2......,end)
代码如下:
class Solution {
public:
int numTrees(int n) {
if(n<=0)
return 0;
vector<vector<int> >Tmp(n+2, vector<int>(n+2, 1));
int temp;
for(int step=1; step<n; ++step)
{
for(int i=1; i+step<=n; ++i)
{
temp = 0;
for(int j=i; j<=i+step; ++j)
{
temp += Tmp[i][j-1]*Tmp[j+1][i+step];
}
Tmp[i][i+step] = temp;
}
}
return Tmp[1][n];
}
};