- 分析
这个题目采用画解法,画图,总结规律。
G(0) = 1;
G(1) = 1;
G(2) = G(0) * G(1) + G(1)*G(0) = 2;
G(3) = G(0)*G(2) + G(1)*G(1) + G(2)*G(0) = 5;
G(n) = G(0)*G(n-1) + G(1)*G(n-2) + ......+G(n-2)*G(1) + G(n -1)*G(0)
采用动态规划的思想编码,代码如下:
- 代码
class Solution {
public:
int numTrees(int n) {
int dp[n + 1];
dp[0] = dp[1] = 1;
for(int i = 2; i <= n; i++){
dp[i] = 0;
for(int j = 0; j < i; j++){
dp[i] += dp[j] * dp[i -1 - j];
}
}
return dp[n];
}
};