タイトル変更毎日の為替Golang 322ダイナミックプログラミング

コインコインの異なる宗派や金額の合計額を考えます。私たちは、合計金額を構成するために必要なコインの最小数を計算するための関数を書くことができます。コインの合計金額のいずれかで構成することができない組み合わせがない場合、-1を返します。

例1:

入力:コイン= [1、2、 5]、量= 11
出力:3
解説:11 = 5 + 5 + 1

例2:

入力:コイン= [2]、量 = 3
出力:-1

注:
あなたは無制限で、各コインの数を考えることができます。

思考

動的計画。

私の答え

func coinChange(coins []int, amount int) int {
    if amount==0{//0元不需要硬币
        return 0
    }
	cnt:=make([]int,amount+1)//初始化切片,cnt(i)表示i块钱所需的硬币数
	for _,v:=range coins{	//0是默认状态,表示无法凑成。
        if amount>=v{
		    cnt[v]=1	//凑硬币面值只需一枚硬币
        }
	}
	for i:=1;i<=amount;i++{
		if cnt[i]==0{//如果当前金额未计算
			for _,v:=range coins{//对于每个硬笔面值
				if v<i&&cnt[i-v]>0{//i-v可以凑成
					if cnt[i]==0{//cnt为默认值则直接记录
						cnt[i]=cnt[i-v]+1
					}else if cnt[i-v]+1<cnt[i]{//若新硬币数更少则更新cnt
						cnt[i]=cnt[i-v]+1
					}
				}
			}
		}
	}
	if cnt[amount]==0{//0表示不得凑成
		return -1
	}
	return cnt[amount]
}
公開された38元の記事 ウォンの賞賛0 ビュー1035

おすすめ

転載: blog.csdn.net/Cyan1956/article/details/104728056