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
Analyse: Dynamic Planning.
If the root is k, then elements in the left subtree are 1, 2, ... k-1; elements in the right subtree are k+1, k+2, ...n. For the left subtree, root->left can be randomly choose from 1, 2, ...k-1, so there are k-1 possibilities. So as the right subtree of the root. If f(k) stands for the amount of solution when k is the root node, then f(k) = f(k-1) * f(n-k).
If there is no node, f(0) = 1; If there is only one node, f(1) = 1.
Runtime: 0ms.
1 class Solution { 2 public: 3 int numTrees(int n) { 4 vector<int> f(n + 1, 0); 5 6 f[0] = 1; 7 f[1] = 1; 8 for(int i = 2; i <=n; i++){ 9 for(int k = 1; k <= i; k++) 10 f[i] += f[k - 1] * f[i - k]; 11 } 12 return f[n]; 13 } 14 };