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.
给一个整数n,求以1~n共能组成多少种二叉搜索树
动态规划题,创建一数组ans[]保存n分别为i 时的结果
则ans[0]=1;
ans[1]=1;
ans[2]=ans[0]*ans[1]+ans[1]*ans[0](根节点为1时左子树种数为ans[0],右子树种数为ans[1],根节点为0时。。)
ans[3]=ans[0]*ans[2]+ans[1]*ans[1]+ans[2]*ans[0](根节点分别为3,2,1,时)
故ans[n]=ans[0]*ans[n-1]+ans[1]*ans[n-2]+...+ans[k]*ans[n-k-1]+...+ans[n-1]*ans[0];
class Solution {
public:
int numTrees(int n) {
vector<int> ans(n+1);
ans[0]=1,ans[1]=1;
for(int i=2;i<=n;i++){
int temp=0;
for(int j=0;j<i;j++)
temp=temp+ans[j]*ans[i-1-j];
ans[i]=temp;
}
return ans[n];
}
};