コインコインの異なる宗派や金額の合計額を考えます。私たちは、合計金額を構成するために必要なコインの最小数を計算するための関数を書くことができます。コインの合計金額のいずれかで構成することができない組み合わせがない場合、-1を返します。
出典:滞在ボタン(LeetCode)
//leetcode-cn.com/problems/coin-change:リンク:httpsの
すべてのネットワークからの控除が著作権を保有。商業転載は、ソースを明記してください許可公式、非商用の転載をご連絡ください。
私は、解決策が出てこない、直接貪欲なアルゴリズムを使用し、最初のアイデアは現在、動的プログラミングです:各ステップの最適解を返された最後の項目を取って、計算されています。
この問題の状態遷移方程式:DP [I] =分(DP [I - コイン[J]、......)
特判:1.I - コイン[J] <0:継続
- [コイン[j]はi]を== -1 DP 2.Ifは:継続とjに対応するDP - 状態遷移方程式が参加していない比較[Iコイン[J]、私は答えを見に行きますよ。
クラスソリューション:
デフcoinChange(自己、コイン:一覧の[int]は、金額ます。int) - > int型:
DP = [0] *(量+ 1)
私のための範囲(1、量+ 1):
I <分(コイン)の場合:
DP [I] = - 1
継続する
curmin =フロート( 'INF')
範囲内のjについて((コイン)LEN):
I-コインであれば[J] <0:継続
DP [I-コイン[J]] == -1の場合:継続
curmin =分(curmin、DP [I-コイン[J]] + 1)
DP [i]は= curmin場合curmin!=フロート( 'INF')他-1
印刷(DP)
DP返す[-1]
動的計画する場合は、ボトムアップアプローチはこれです。