2016-01-24 43 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) –