Given n, how many structurally unique BST's (binary search trees) that store values 1...n?
简单动态规划。判别每个左右子树各有多少种情况,然后相乘就可以了,而且是BST,注意这条件就可以解了。它的状态转移方程为:
for j<i:
a[i]+ = a[j-1]*a[n-j]
1 class Solution {
2 public:
3 int numTrees(
int n) {
4 int A[n];A[
0]=
1;
5 for(
int i=
1;i!=n+
1;i++
){
6 A[i] =
0;
7 if(i<
3)
8 A[i]=
i;
9 else{
10 for(
int j=
1;j!=i+
1;j++
)
11 A[i]+=A[j-
1]*A[i-
j];
12 }
13 }
14 return A[n];
15 }
16 };
你问我有没有更快的解,我会告诉你当然有啦,我们把状态转移方程展开来:
a[i] = a[0]a[i-1]+a[1]a[i-2]+……+a[i-1]a[0];
看出来了吧,这个式子就是卡特兰数的递推式,所以直接带结果就可以了。(但是会溢出。。。笑)
转载于:https://www.cnblogs.com/desp/p/4334062.html
相关资源:JAVA上百实例源码以及开源项目