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];
看出来了吧,这个式子就是卡特兰数的递推式,所以直接带结果就可以了。(但是会溢出。。。笑)