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
Considering from basic case,
if n==0, there is only 1 BST,
if n==1, there is 1,
if n==2, root node could be either 1 or 2,
if root == 1, left sub tree size == 0, bstNum[left] = 1, right sub tree size ==1, bstNum[right] = 0,
thus, for root == 1, there is 1 BST.
Similarly, if root==2, there is 1 BST tree.
So for n==2, bstNum = 2;
If n==3, if root = 1, bstNum[left] =1, bstNum[right] =2, there is 1*2 = 2 BST, same as root =3. For root == 2, bstNum[left] =1, bstNum[right] = 1, so there is 1 BST.
So for n==3, bstNum = bstNum[root==1] + bstNum[root == 2] + bstNum[root==3] = 5
For i=n, calculate root = 1,2,...n, in each case, what is the number of bstNum, by calculating bstNum[left]*bstNum[right]
So DP could solve this problem