题目
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)
优雅的做法就是识别出结果是卡特兰数,该题符合卡特兰数的递推公式:h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (n>=2)。
因此可以直接使用卡特兰数的计算公式:h(n)=C(2n,n)/(n+1) (n=0,1,2,...),得到解法2
解法1
public class UniqueBinarySearchTrees {
public int numTrees(int n) {
if (n <= 1) {
return 1;
}
int[] records = new int[n + 1];
records[0] = records[1] = 1;
for (int i = 2; i <= n; ++i) {
for (int k = 0; k < i; ++k) {
records[i] += records[k] * records[i - 1 - k];
}
}
return records[n];
}
}解法2
public class UniqueBinarySearchTrees {
public int numTrees(int n) {
if (n <= 1) {
return n;
}
int catalanNum = 1;
for (int i = 2; i <= n; ++i) {
catalanNum = catalanNum * 2 * (2 * i - 1) / (i + 1);
}
return catalanNum;
}
}LeetCode | Unique Binary Search Trees,布布扣,bubuko.com
LeetCode | Unique Binary Search Trees
原文:http://blog.csdn.net/perfect8886/article/details/21110863