卡特蘭數列程式設計實現(go)
阿新 • • 發佈:2018-11-23
1. 推導公式
2.卡特蘭數列程式設計實現
方法一:
func numTrees(n int) int {
if 0 == n || 1 == n {
return 1
}
G := make([]int, 0)
G = append(G, 1)
G = append(G, 1)
for i:=2; i<=n; i++ {
temp := 0
for j:=1; j <=i; j++ {
temp += G[j-1] * G[i-j]
}
G = append(G, temp)
}
return G[n]
}
方法二:
// f(n) = f(n-1)*f(0) + f(n-2)*f(1) + ... + f(n-i)*f(i-1) + ... + f(0)*f(n-1) // f(n) = C(2n,n)/(n+1) // f(n)=f(n-1)*(4*n-2)/(n+1); // 上面該公式是卡特蘭數, 相關推導公司見wiki: https://blog.csdn.net/hemeinvyiqiluoben/article/details/11320419 func numTrees(n int) int { if 0 == n || 1 == n { return 1 } res := 1 for i:=2; i <=n; i++ { res = res * (4 * i - 2) / (i + 1) } return res }