| 1234567891011121314151617181920212223242526 | 
							- package main
 
- // G(n) -> number of unique binary search tree of [1...n]
 
- // F(i, n) -> ... of [1...n] while i is root
 
- // G(n) = sum(F(i, n)), i ~ [1...n]
 
- // F(i, n) = G(i-1) * G(n-i)
 
- // So, G(n) = G(0) * G(n-1) + G(1) * G(n-2) + ... + G(n-1) * G(0)
 
- func numTrees(n int) int {
 
- 	if n == 0 {
 
- 		return 1
 
- 	}
 
- 	G := make([]int, n+1)
 
- 	G[0], G[1] = 1, 1
 
- 	for i := 2; i <= n; i++ {
 
- 		for j := 1; j <= i; j++ {
 
- 			G[i] += G[j-1] * G[i-j]
 
- 		}
 
- 	}
 
- 	return G[n]
 
- }
 
- // func main() {
 
- // 	fmt.Println(numTrees(0))
 
- // 	fmt.Println(numTrees(1))
 
- // 	fmt.Println(numTrees(7))
 
- // }
 
 
  |