Unique Binary Search Trees
class Solution { public: int numTrees(int n) { vector<int> node(n+1,0);//注意这里是n+1; node[0]=1; node[1]=1; for(int i=2;i<=n;i++){ for(int j=0;j<=i;j++) node[i]+=node[j]*node[i-j-1]; } return node[n]; } };
这道题开始没有思路,百度了一下,用到了一个叫卡塔兰数的东西,和斐波那契数列一样,也是一个递推序列
dp[2] = dp[0] * dp[1] (1为根的情况) + dp[1] * dp[0] (2为根的情况) 同理可写出 n = 3 的计算方法: dp[3] = dp[0] * dp[2] (1为根的情况) + dp[1] * dp[1] (2为根的情况) + dp[2] * dp[0] (3为根的情况)
由此可以得出卡塔兰数列的递推式为:
接着累加即可。