【leetcode】1269。いくつかのステップの後に同じ場所に滞在するいくつかの方法

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

あなたは、インデックスにポインタを持っている  0 サイズの配列に  arrLen各ステップでは、左に1つの位置、(ポインタはいつでも、アレイの外側に配置されるべきではない)同じ場所でのアレイ又は滞在中右へ1つの位置を移動させることができます。

二つの整数を考える  steps と  arrLen、このようなインデックスでは、まだあなたのポインタそのいくつかの方法を返す  0 正確後の  steps 手順を。

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

例1:

入力:ステップ= 3、arrLen = 2 
出力:4 
説明:3つのステップの後に、インデックス0に滞在する4つの貴様の方法があります。
右、左、滞在
滞在、右、左
、右、滞在、左
滞在、滞在、滞在

例2:

入力:ステップ= 2、arrLen = 4 
出力:2 
説明:インデックス0に滞在する2つの貴様の方法は2つの段階の後にあります。
右、左
滞在、滞在

例3:

入力:ステップ= 4、arrLen = 2 
出力:8

制約:

  • 1 <= steps <= 500
  • 1 <= arrLen <= 10^6

ソリューションの概要: DP [I] [J]私はちょうどインデックスjの移動後に位置された回数であり、i番目のステップは、jに移動するように、I-1、位置のみとすることができるの最初のステップ[Jと呼ば-1、J、J + 1] 、 これがDP [I] [J] = DP [I-1] [J-1] + DP [I-1]〜[J] + DP [I-1] [J 1]。

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

クラス溶液(オブジェクト):
     DEF numWays(自己、ステップ、arrLen):
         "" " タイプステップ:INT 
        :タイプarrLen:INT 
        :RTYPE:INT 
        """ 
        arrLen = 分(arrLen、ステップ)

        DP = [0] *(arrLen) _ 範囲(工程+ 1 )] 

        DP [ 1] [0] = 1 
        、DP [ 1] [1] = 1 のための I における範囲(1、工程+ 1 のための J における範囲(LEN (DP [I])):
                DP [I] [J] + = DP [I-1 ] [J]
                

        もし J - 1> = 0 および J - 1 < lenの(DP [I]):
                    DP [I] [J] + = DP [I-1] [J-1 ]
                 であれば J + 1 < lenの(DP [I ]):
                    DP [I] [J] + = DP [I-1] [J + 1 ] 

        戻り DP [-1] [0]%(10 ** 9 + 7 

 

おすすめ

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