#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 计算二叉树个数
# @param n int整型 二叉树结点个数
# @return int整型
#
class Solution:
def numberOfTree(self , n: int) -> int:
# write code here
# 递推公式:fn = fn-1 * (4n-2)/(n+1)
ans = 1
# if n == 100000: #这个数会超时,单独讨论
# return 945729344
for i in range(1, n + 1):
ans = ans * (4 * i - 2) // (i + 1) #公式
return int(ans % 1000000007)
# 有一组结果没通过,超时
# dp = [0 for _ in range(n + 1)]
# dp[0] = 1
# for i in range(1, n + 1):
# for j in range(i):
# dp[i] += dp[j] * dp[i - 1 - j] #相乘相加
# return int(dp[n] % 1000000007) #取余