LeetCode 96. 不同的二叉搜索树
给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?
算法:动态规划。我们用f[i]表示i个结点的BST有多少种。那么左子树可能为0,1,...n-1。对应的右子树则为n-1,...0。根据排列组合知,总数为f[k]*f[n-k-1]求和。
class Solution { public: int numTrees(int n) { vector<int>f(n+1); f[0]=1; for(int i=1;i<=n;i++){ f[i]=0; for(int j=1;j<=i;j++) f[i]+=f[j-1]*f[i-j]; } return f[n]; } };