//1.卡塔兰数 Cn+1 = 2*(2*n+1)/(n+2)Cn
func numTrees(n int) int {
C := 1
for i := 0; i < n; i++ {
C = C * 2 * (2*i + 1) / (i + 2)
}
return C
}
//2dp
func numTreesDP(n int) int {
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(10))
fmt.Println(numTreesDP(10))
}