Given n, how many structurally unique BST's (binary search trees) that store values 1 ... n?
Example:
Input: 3 Output: 5 Explanation: 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
题解:给出BST总共多少个,本质上就是个卡特兰问题,可以先给出递归式,对于k定义dp[k]为前k个数的BST个数,对节点kBST个数可以看成母树和子树的个数所以dp[k]=∑dp[i]dp[k-i-1],这个就是卡特兰数的递归式
代码:
class Solution {
public:
int numTrees(int n) {
vector<int> dp(n+1,0);
dp[0]=dp[1]=1;
for(int i=2;i<=n;i++){
for(int k=0;k<i;k++){
dp[i]+=dp[k]*dp[i-k-1];
}
}
return dp[n];
}
};
用公式:
class Solution {
public:
int numTrees(int n) {
long C = 1;
for(int i=0;i<n;i++){
C = C*2*(2*i+1)/(i+2);
}
return (int) C;
}
};