2017-04-14 88 views
0

我有四個數字,「1」,「2」,「3」,「4」。動態規劃解決排列問題

該程序的輸入是一個整數,只能包含上述4位數字。將會有很多投入。的輸入

實施例:1123,4123,4444

我需要計算給定輸入粘附到下面的規則的排列的數量:

  1. 沒有兩個類似數字應鄰近彼此。例如:1223不允許,但允許2123。
  2. 開始結束的數字不應該是一樣的。他們被認爲是循環相鄰。例如:2132是不允許的。
  3. 如果輸入的長度是4位數,則結果排列的長度也應該是4位數。

我可以使用任何類型的memoization來解決這個問題嗎?我如何將它存儲在二維數組中?給小費謝謝!

+0

輸入是否總是4位數字以及只包含數字1,2,3,4?你只給出長度爲4:1123,4123,4444的例子,它建議是的,但是規則(3)的條件是長度爲4的輸入,這表明不是。 –

回答

1

由於您只對允許排列的數量感興趣,因此大多數輸入會導致相同的結果。

  • 在輸入數字的順序並不重要
  • 只有數字出現的頻率分佈是很重要的,即1123和1223導致了相同的答案。

分類的投入,根據數字頻率導致剛剛5種不同情況下的四位輸入:

class  examples 
4   4444, 2222, ... 
3 1  1211, 2232, ... 
2 2  1331, 4422, ... 
2 1 1  3413, 1123, ... 
1 1 1 1 1234, 4231, ... 

一旦你已經想通了,每個個案的答案,任何新的輸入可以處理得非常快。

+1

所以如果輸入是前兩個類中的一個,則有0個有效排列。在'2 2'情況下,有2:'1010'和'0101'。在'2 1 1'的情況下,有4個。最後一個例子中有24個。是的,一個查找表將很快爲你處理。 –

+0

是的,它是最高效的解決方案,但這可能太過先進。可能只有四位數字是故意的,所以你可以暴力破解。 – maraca