找规律,对于每一次的n,都可以看成有不同的数目作为根节点,然后再算这个根节点的左右有多少的不同的节点,就有多少种可能,最后左右相乘就ok
class Solution {
public:
int numTrees(int n) {
vector<int>ve;
ve.push_back(1);
ve.push_back(1);
ve.push_back(2);
for(int i = 3; i <= n; ++ i){
int sum = 0;
for(int j = 1; j <= i; ++ j){
sum = sum + ve[j - 1] * ve[i - j];
}
ve.push_back(sum);
}
return ve[n];
}
};