问题描述:
给定n,存储值1 ... n的结构唯一BST(二进制搜索树)有多少?
解题思路:
对于从1到n,根有n种选择方式,并将原序列分为两个新的序列,这两个新的序列必然是有序的,规模变小了,而且我们注意到1234和5678所能构造的BST的个数是相同的,所以可以通过递归来实现。因为是尾递归,所以可以改写为迭代,用一个数组来存储从1到n不同长度的序列所能构造的BST的数目。
源代码如下:
#include<vector>
class Solution {public:
int numTrees(int n) {
vector<int> temp;
temp.push_back(1);
for (int i = 1; i <= n; ++i) {
int t = 0;
for (int j = 0; j < i; ++j)
t += temp[j] * temp[i-j-1];
temp.push_back(t);
}
return temp.back();
}
};