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
解题思路:
对于每一个根节点,能够形成的二叉搜索树都是左子树和右子树的乘积,但是对于1-n中的1和n除外,1和n都是等于n-1个数的二叉搜索树数量,一开始使用递归实现,发现超时,加了n == 3 和 n == 4的两种情况后,AC了,由于递归有大量的重复计算,所以使用数组将中间结果存下,节省开销,下面分别附上两种解法:
public class Solution {
public int numTrees(int n) {
if(n == 1 || n == 2)
return n == 1 ? 1 : 2;
else if(n == 3 || n == 4)
return n == 3 ? 5 : 14;
else{
int sum = 0;
for(int i = 1; i <= n; i++){
if(i == 1 || i == n)
sum += numTrees(n-1);
else
sum += numTrees(i-1) * numTrees(n-i);
}
return sum;
}
}
}
public class Solution {
public int numTrees(int n) {
int[] sums = new int[n+1];
sums[0] = 1;
for(int i = 1; i <= n; i++){
if(i < 3)
sums[i] = i;
else{
for(int j = 1; j <= i; j++)
sums[i] += sums[j-1] * sums[i-j];
}
}
return sums[n];
}
}