次のように内容は次のとおりです。
あなたは、インデックスにポインタを持っている
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 )