96. Unique Binary Search Trees

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




动态规划:


G(n): the number of unique BST for a sequence of length n.

F(i, n), 1 <= i <= n: the number of unique BST, where the number i is the root of BST, and the sequence ranges from 1 to n.

G(n) = F(1, n) + F(2, n) + ... + F(n, n). 

Particularly, the bottom cases, there is only one combination to construct a BST out of a sequence of length 1 (only a root) or 0 (empty tree).

G(0)=1, G(1)=1. 
F(i, n) = G(i-1) * G(n-i)	1 <= i <= n 

Combining the above two formulas, we obtain the recursive formula for G(n)i.e.

G(n) = G(0) * G(n-1) + G(1) * G(n-2) + … + G(n-1) * G(0) 
 1 class Solution {
 2     public int numTrees(int n) {
 3         int[] G = new int[n+1];
 4         G[0] = 1;G[1] = 1;
 5         for(int i = 2;i <= n ;i++)
 6             for(int j = 1;j<= i; j++)
 7                 G[i] +=G[j-1]*G[i-j];
 8         return G[n];
 9     }
10 }
原文地址:https://www.cnblogs.com/zle1992/p/8335187.html