原题网址:https://leetcode.com/problems/unique-binary-search-trees/
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
方法一:递归+记忆化搜索
public class Solution {
private Integer[] nums;
private int calc(int n) {
if (nums[n] != null) return nums[n];
int count = 0;
for(int i=1; i<=n; i++) {
if (i==1) {
count += calc(n-1);
} else if (i==n) {
count += calc(n-1);
} else {
count += calc(i-1) * calc(n-i);
}
}
nums[n] = count;
return count;
}
public int numTrees(int n) {
nums = new Integer[n+1];
nums[0] = 1;
nums[1] = 1;
return calc(n-1+1);
}
}
方法二:递推,动态规划。
public class Solution {
public int numTrees(int n) {
int[] nums = new int[n+1];
nums[0] = 1;
for(int i=1; i<=n; i++) {
for(int j=1; j<=i; j++) {
nums[i] += nums[j-1] * nums[i-j];
}
}
return nums[n];
}
}