题目
假设有n对左右括号,请求出合法的排列有多少个?合法是指每一个括号都可以找到与之配对的括号,比如n=1时,()是合法的,但是)(为不合法。
给定一个整数n,请返回所求的合法排列数。保证结果在int范围内。
测试样例:
1
返回:1
思路
卡特兰数,Cn2nn+1C2nnn+1。
代码
class Parenthesis:
def get_arrange(self, n, num):
count = 1
num1, num2 = 1, 1
while count <= num:
num1 *= n
n -= 1
num2 *= count
count += 1
return num1 // num2
def countLegalWays(self, n):
# write code here
return self.get_arrange(2 * n, n) // (n + 1)