//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))
}
本文介绍了两种计算卡塔兰数的方法:一种是利用公式直接计算,另一种是使用动态规划方法。通过这两种方法可以有效地求解卡塔兰数,这对于解决计算机科学中诸如二叉树计数等问题非常有用。
522

被折叠的 条评论
为什么被折叠?



