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.
1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
推倒公式太麻烦了。 穷举吧。。。
n=0 -- 1
n=1 -- 1
n=2 -- 1 为root,那么depend on 2有多少个, 2为root depend 1有多少个 f(1)*f(0)+f(0)*f(1)
n=3--- 1为root depend 下一个节点有多少个, f(0)*f(2)+f(1)*f(1)+f(2)*f(0) 为什么? 以1为root举例,左树为空f(0), 右数为2, f(2), 以2为例子,左树为1, 右树为1, f(1)*f(1), 同理 3为root.
写出递推公式, C_n+1=sum_i(C_i*Cn), 一维动态规划。。。。
class Solution {
public:
int numTrees(int n) {
vector<int> res(n+1,0);
res[0]=1;
for(int i=1; i<=n; i++){
for (int j=0; j<i; j++){
res[i]+=res[j]*res[i-j-1];
}
}
return res[n];
}
};