あなたは、異なる宗派や合計金額のコインを与えられています。その金額を構成する組み合わせの数を計算する関数を記述します。あなたは、コインの種類ごとの無限の数を持っていることを仮定してもよいです。
例1:
入力:量= 5、コイン= [1、2、5]
出力:4
説明:量を補うために、4つの方法があります。
5 = 5
5 = 2 + 2 + 1
5 = 2 + 1 + 1 + 1
5 = 1 + 1 + 1 + 1 + 1
例2:
入力:量= 3、コイン= [2]
出力:0
説明:3の量がちょうど2のコインで作らことができません。
例3:
入力:量= 10、コイン= [10]
出力:1
注意:
あなたはそれを取ることができます
- 0 <=量<= 5000
- 1 <=コイン<= 5000
- コインの数が500未満であります
- その答えは、符号付き32ビット整数に収まるように保証されています
所定量のAについて、Aを得るためにすべての可能な方法は2例に分けることができます。
1.なしコイン[I]が使用されます。前記少なくとも一つのコイン[I]が使用されます。
我々反復可能なすべての宗派を経て、現在選択された金種を使用して、各可能量について、いくつかの方法をカウントアップのであれば、最終的な答えは尋ねた金額で、これらすべての合計になります。
クラスソリューション{ 公共 int型の変化(INTの量、INT []硬貨){ INT [] DP = 新しい INT [量+ 1 ]。 DP [ 0] = 1 ; 以下のために(INT ; I <coins.length; iが0 = I ++ ){ ため(INT J =コイン[i]は、J <=量; J ++ ){ DP [J] + = DP [J - コイン[I]]。 } } 戻りDP [量]。 } }