1220【leetcode】。母音順列を数えます

次のように内容は次のとおりです。

整数を考えると  n、あなたのタスクは、どのように多くの長さの文字列カウントすることで  n 、以下のルールの下に形成することができます。

  • 各文字は小文字の母音です('a'、  'e'、  'i'、  'o'、  'u'
  • 各母音  'a' のみを行ってもよいです  'e'
  • 各母音  'e' のみを行ってもよいです  'a' か、  'i'
  • 各母音は  'i' 、別続くことはできません  'i'
  • 各母音  'o' のみを行ってもよいです  'i' か、  'u'
  • 各母音は、  'u' によってのみ続いてもよいです 'a'.

答えは大きすぎる可能性がありますので、それはモジュロ戻ります 10^9 + 7.

 

例1:

入力:n = 1の
出力:5 
説明:すべての可能な文字列は、次のとおりです。 "A"、 "E"、 "I"、 "O"と"U"。

例2:

入力:n = 2の
出力:10 
説明:すべての可能な文字列は、次のとおりです。 "AE"、 "EA"、 "EI"、 "IA"、 "つまり"、 "IO"、 "IU"、 "大井"、 "OU"そして"UA"。

例3: 

入力:N = 5 
出力:68

制約:

  • 1 <= n <= 2 * 10^4

問題解決のアイデア:動的計画法、DPと呼ば[i] [j]は、文字列の数は、母音のj番目の場所のi番目の位置の場合に構成することが可能であり、状態遷移方程式を得ることは容易です。例えば、i番目の要素が'E'である場合、最初のi-1個の要素のみ'A'又は'I'とすることができる、[I] [ 'E'がDP ] DP [I-1] [A「を= 「] + DP [I-1 ] [」I「]、 そして最終的に唯一のn番目の要素は、5つの母音と缶の数を入れて決定されます。

コードは以下の通りであります:

クラス溶液(オブジェクト):
     デフcountVowelPermutation(自己、N):
         "" " タイプN:INT 
        :RTYPE:INT 
        """ 
        DP = [0] * 5  _ における範囲(N)] 
        母音 = [ ' ' ' E ' ' I ' ' O ' ' U ' ] 
        DP [0] [0] = DP [0] [1] DPを= [0] [2] DPを= [0] [3] = DP [0] [4] = 1の
         ための I 範囲(1、LEN(DP))
             のために、J における範囲(LEN(母音)):
                 もし母音[J] == ' ' 
                    DP [I] [J] + = DP [iが- 1] [vowels.index(' E ' )] 
                    DP [I] [J] + = DP [I - 1] [vowels.index(' U ' )] 
                    DP [I] [J] + = DP [I - 1] [vowels.index(' I ' )]
                 ELIFの母音[J] == ' E ' 
                    DP [I] [J] + = DP [I - 1] [vowels.index(' A ' )] 
                    DP [I] [J] + = DP [I - 1] [vowels.index(' I ' )]
                 ELIFの母音[J] == ' I ' 
                    DP [I] [J] + = DP [I - 1] [vowels.index(' E ' )] 
                    DP [I] [J] + = DP [I - 1] [vowels.index(' O ' )]
                 ELIFの母音[J] == ' O ' 
                    DP [I] [J] + = DP [I - 1] [vowels.index(' iは[)]
                 ELIFの母音[J] == ' U ' 
                    DP [I] [J] + = DP [I - 1] [vowels.index(' I ' )] 
                    DP [I] [J] + = DP [I - 1] [vowels.index(' O ' )]
         戻り和(DP [-1])%(10 ** 9 + 7)

 

おすすめ

転載: www.cnblogs.com/seyjs/p/11646665.html