2016-01-24 46 views

回答

1

考虑输出对应于以下字母:

a。 1 1 1 1 = 6

b。 0 0 6 3 = 57

℃。 1 1 1 2 = 8

再论从问题的定义以更战术方式,4个输入对应于以下:

  1. 的“{}”对数
  2. 数“[]”对
  3. 的“()”对数
  4. 产生输出

输出时,最大深度是单一的数表示相匹配的输入参数(多少深度可以与对使用)和3对的许多组合可以如何生成匹配的优先顺序的正则表达式的数量规则“()”不能包含“{}”或“ []“和”[]“不能包含”{}“。

下面的演练演示如何在输出到达,但它并没有试图打破子问题或任何东西了。希望它至少可以帮助你连接数字并开始找出可能出现的问题。

以这些例子明确地,开始用“一”为1 1 1 1 = 6

  • 的输入意味着仅做深度为1,并使用1对中的每个的“{}”,“[]”,“ ()”。这是一个置换的3个多安排如何可制成排列,所以3! = 6
  • 实际:{},{}()[],[] {}(),{},(){} []()[] {}

然后去“b”为1 1 1 2 = 8

  • 这仅仅是如“a”与异常,我们现在必须允许深度(d = 2,而不是1)
  • 因此的另一个水平,这是6从“a” +深度的任何其它组合= 2 **附加= {[()]},{}(仅2个附加的情况下满足规则)
  • “一” +(ADDIT对于d = 2)= 8

最后,考虑“b”我们只探索6“()”的d = 3。

  • 我们必须打破和添加的1,2的深度(d)和3
  • 因为只有括号这里存在,这仅仅是一个加泰罗尼亚号CN,其中n = 6,但不限于一个深度不超过3级括号(更多关于此:https://en.wikipedia.org/wiki/Catalan_number)C(6)= 132,但一旦排除所有加泰罗尼亚数超过3的深度,则剩下57个匹配。 ()()()()()开始于d = 1,所以just()()()()函数返回所有组合的圆括号中的所有组合,即深度为3或更小以获得57条记录: ** ()()() **然后d = 2,所以像(())()()()(),()(())()()(),()()(()) )()()()()()()()()()()()()(())等 **然后d = 3, ()()()()()()(())()()()()()()()()())等等
+0

非常感谢解释! :) –

+0

你能解释我如何输出? 8 0 11 3 2845 –

+1

与繁琐的迭代非常相似,将深度限制为3,然后获取8个括号和11个括号的所有组合,支持深度最多为3的有限区域,以便括号内不包含括号。我有意避开DP子问题 - 自从我的算法类开始,这已经很长时间了:)您可能会更好地帮助您开始解决您在“数学”社区中的重现(http://数学。 stackexchange.com/questions/tagged/dynamic-programming) –