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题源: here;完整实现: here
思路:
同上一题的思路一样。但有两种实现方案:1 递归(超时);2 动态规划。
1 递归:
int helper(int low, int high){
int res = 0;
if (low >= high) return 1;
for (int i = low; i <= high; i++){
int leftNum = helper(low, i - 1);
int rightNum = helper(i + 1, high);
for (int left = 0; left < leftNum; left++){
for (int right = 0; right < rightNum; right++){
res++;
}
}
}
return res;
}
int numTrees(int n) {
if (n == 0) return 0;
return helper(1, n);
}
2 动态规划
int numTrees2(int n) {
if (n == 0) return 0;
vector<int> dp(n+1, 0);
dp[0] = dp[1] = 1;
for (int i = 2; i <= n; i++){
for (int j = 0; j < i; j++){
dp[i] += dp[j] * dp[i - j - 1];
}
}
return dp[n];
}
纪念贴图: