class Solution:
def numTrees(self, n: int) -> int:
if n <= 1:
return 1
res = 0
for i in range(1, n + 1):
res += self.numTrees(i - 1) * self.numTrees(n - i)
return resclass Solution:
def __init__(self):
self.dp = {}
def numTrees(self, n: int) -> int:
if n <= 1:
return 1
if n in self.dp:
return self.dp[n]
res = 0
for i in range(1, n + 1):
res += self.numTrees(i - 1) * self.numTrees(n - i)
self.dp[n] = res
return resclass Solution:
def numTrees(self, n: int) -> int:
numTree = [1] * (n + 1)
for nodes in range(2, n + 1):
total = 0
for root in range(1, nodes + 1):
left = root - 1
right = nodes - root
total += numTree[left] * numTree[right]
numTree[nodes] = total
return numTree[n]class Solution:
def numTrees(self, n: int) -> int:
res = 1
for i in range(1, n):
res *= (n + i + 1)
res //= i
return res // nclass Solution:
def numTrees(self, n: int) -> int:
res = 1
for i in range(n):
res *= (4 * i + 2) / (i + 2)
return int(res)