【发布时间】:2017-02-01 21:36:58
【问题描述】:
我必须找出有效括号的数量。括号有两种类型[] ,()。有多少种方法可以使用[] ,() 的 X 和 Y 数来构造一个有效的序列。对于这个问题,我们认为([]) 是无效的方式,即() can't hold [].
有没有比递归更好的解决方案。
For Example X=1 and Y=1
[]()
()[]
[()]
【问题讨论】:
-
X=N, Y=0的公式是2^(N-1),但我没有足够的咖啡来继续下去。我认为有一个合理的公式。 -
您问“有没有比递归更好的解决方案?”也许如果你展示了你的递归解决方案,你就有可能将它变成一个 DP 程序。最难的部分(找出递归关系)应该已经完成了。
-
@stark 我认为这不对——对于
X=N, Y=0(以及X=0, Y=N),答案是Nth Catalan 号码。请参阅“组合数学中的应用”下的 en.wikipedia.org/wiki/Catalan_number。 -
@PaulHankin 我与加泰罗尼亚数字的不同之处在于
(()())是否有效。如果是,那么我认为加泰罗尼亚数字是正确的,如果不是,那么 2^N。显然,我们都假设)(是无效的。
标签: algorithm dynamic-programming catalan