あなたは、異なる宗派やお金の総量のコイン与えられている 量を。あなたはその金額を構成するために必要なコインの最小数を計算する関数を書きます。お金の量は、コインの任意の組み合わせによって構成されたことができない場合は、返します -1
。
例1:
入力:コイン=[1, 2, 5]
、量=11
出力:3
説明:11 = 5 + 5 + 1
例2:
入力:コイン=[2]
、量=3
出力:-1
注意:
あなたは、コインの種類ごとの無限の数を持っていることを仮定してもよいです。
被験者は、01バックパックの数に制限は、バックパックのターゲット== si'zeを行い使用することです。
REFER: [LeetCode] 5_Dynamicプログラミングシステムブラシのタイトル
コード:
クラスソリューション: DEF :coinChange(自己、コイン、量) なら ないコイン又は量<0:戻り -1 N = LEN(コイン) DP = [[フロート(' INF ')] *(量+ 1)のための _ 中レンジ(N + 1 )] のための I における範囲(N + 1 ): DP [I] [0] = 0 のための I における範囲(1、N + 1 ) のための J で範囲(1、量+ 1 ): もし J> =コイン[I - 1 ]: DP [I] [J] =分(DP [I - 1] [j]は、DP [I] [J -コイン[I - 1] + 1 ) 他: DP [I] [J] = DP [I - 1 ] [j]の 戻り DP [n]は[量] もし DP [n]は[量] <フロート(' INF ')他 -1
アレイをスクロールするために使用することができる空間がO(量)のために最適化されています