一、题目
Given an integer n, return the number of structurally unique BST’s (binary search trees) which has exactly n nodes of unique values from 1 to n.
Example 1:
Input: n = 3
Output: 5
Example 2:
Input: n = 1
Output: 1
Constraints:
1 <= n <= 19
二、题解
法一:动态规划法
class Solution {
public:
int numTrees(int n) {
vector<int> dp(n+1,0);
dp[0] = 1;
for(int i = 1;i <= n;i++){
for(int j = 1;j <= i;j++){
dp[i] += dp[j-1] * dp[i-j];
}
}
return dp[n];
}
};
法二:利用卡特兰数
注意当n = 19时,int会溢出
class Solution {
public:
int numTrees(int n) {
long long res = 1;
for(int i = 0;i < n;i++){
res = res * 2 * (2 * i + 1) / (i + 2);
}
return (int)res;
}
};