69. チェンジ交換
トピックリンク
出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/coin-change
タイトル説明
コインコインの異なる宗派や金額の合計額を考えます。私たちは、合計金額を構成するために必要なコインの最小数を計算するための関数を書くことができます。コインの合計金額のいずれかで構成することができない組み合わせがない場合、-1を返します。
例1:
入力:コイン= [1、2、 5]、量= 11
出力:3
解説:11 = 5 + 5 + 1
例2:
入力:コイン= [2]、量 = 3
出力:-1
注:
あなたは、各コインの数を考えることができます制限はありません。
キーテクノロジー
ダイナミックプログラミング
トピック分析
実施例1に係る分析:
- 硬貨の金種がある:1,2,5、総量が11であり、今DP [I]は、コインの番号iの最適解の和であると仮定されます。
- 三つの異なる宗派があるため、それほど11の三つの方法がある必要がある:1つの+ DP [6]; 1つの+ DP [8] 1つの+ DP [10]。
- 従って最適解11を変換し、三つ以上の、それぞれ、コインの最小数、すなわち、DP [11]である最適解、= Math.min(1つの+ DP [10]である1+ DP [8]、1 + DP [6])
- 誘導された状態遷移式:DP [I] = Math.min(DP [I-コイン] +1、DP [I-コイン] +1、DP [I-コイン] +1、...)
- コインがいくつかあるどのように多くのコイン異なる宗派のに依存して何回、どのように多くのコインを比較します。
- DPのため[10]、DP [8]、DP [6]、その後、上記分解工程に応じ。
/ ** * @param {数[]}コイン * @param {数}量 * @return {数} * / VAR coinChange =関数(コイン、量){ VARのDP =新しいアレイ(量+ 1).fill(インフィニティ); DP [0] = 0; ための式(I = 0せ; I <=量; I ++){ {(コインのコインを聞かせて)ための IF(I -コイン> = 0){ [[I] = Math.min(DP DP [i]は、DPをI -coin] +1)。 } } } 戻りDP [量] ===インフィニティ?-1:DP [量]。 }。