如何根据括号总数找到数字和实际的正确括号表达式?

时间:2015-03-23 14:07:35

标签: algorithm

这是在接受采访时向我询问的。那时我还不知道它的适当复发。问题是,如果给出表达式的长度,那么可以用这个长度制作多少个合适的括号表达式,它们将是什么?

适当的括号表达式例如是

[[]][[[]][]] 
[[[][]]][][[]]

以下不是正确的括号表达式,

[[[][]]][]][[]]

也就是说,每个开口支架都有一个闭合支架。 我不是在寻找实现,而只是算法或者我应该如何处理它?

谢谢!

2 个答案:

答案 0 :(得分:1)

这是Python中的算法:

def properbracket(l, s):
  if l == 0:
    if s == 0:
      return 1
    else:
      return 0
  ret = 0
  if s > 0:
    ret += properbracket(l-1, s-1)
  ret += properbracket(l-1, s+1)
  return ret

print properbracket(2, 0)
print properbracket(4, 0)
print properbracket(6, 0)

...这里是不同长度的有效表达式: len == 2:

[]

len == 4:

[[]]
[][]

len == 6:

[[[]]]
[][][]
[][[]]
[[][]]
[[]][]

这假定“] [”不是有效的表达。

答案 1 :(得分:0)

以下重复是基于前导开括号必须具有匹配的右括号,这样在这些括号内必须有一个有效的表达式而在结束后必须有另一个

  • P(0)= 1
  • P(1)= 0
  • P(2)= 1
  • P(N> 2)= sum(i = 0..N / 2-1)(P(2i)* P(N-2-2i))