问题
思路
catalan数。至于怎么分析的,参考自己的lintcode刷题里对这个题的解释。基本方法是固定根节点之后,剩下的N-1个节点,依次在左右两支展开。
代码
class Solution {
public:
int numTrees(int n) {
return catalan(n);
}
private:
int catalan(int n) {
vector<int> dp(n+1, 0);
dp[0] = dp[1] = 1;
for(int i = 2; i <= n; ++i) {
for(int j = 0; j < i; ++j) {
dp[i] += dp[j]*dp[i-1-j];
}
}
return dp[n];
}
};