给出数字n,表示1......n,
问由这些数字可以组成多少种不同的二叉树
直接给出递推式子
ans[i]表示数字i可以组成ans[i]中不同的二叉树
那么 ans[i] = sum(ans[i-j] * [j]) 1<=j<=i
public class Solution {
public int numTrees(int n) {
int size = 35;
int[] ans = new int[size];
Arrays.fill(ans, 0);
ans[0] = ans[1] = 1;
ans[2] = 2;
for(int i = 3; i < ans.length; ++i){
for(int j = 0; j < i; ++j){
ans[i] += ans[j] * ans[i - 1 - j];
}
}
return ans[n];
}
}