Description
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
Solution
好像是个什么数列:
f
n
=
f
0
×
f
n
−
1
+
f
1
×
f
n
−
2
+
⋯
+
f
n
−
1
×
f
0
f_n= f_0 \times f_{n-1} +f_1 \times f_{n-2} + \dots +f_{n-1} \times f_0
fn=f0×fn−1+f1×fn−2+⋯+fn−1×f0
class Solution {
public:
int numTrees(int n) {
vector<int> res(n+1,0);
res[0] = 1;
res[1] = 1;
for(int i = 2; i <= n; ++i)
for(int j = 0; j < i; ++j)
res[i] += res[j] * res[i-1-j];
return res[n];
}
};
result:
Runtime: 4 ms, faster than 100.00% of C++ online submissions for Unique Binary Search Trees.
Memory Usage: 8.3 MB, less than 34.53% of C++ online submissions for Unique Binary Search Trees.
好像不能同时快且内存小啊。
20190415
tbc