給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 -1。
示例1
輸入: coins = [1,2,5], amount = 3
輸出: 3
解釋: 11=5+5+1
示例2輸入: coins = [ 2], amount = 3
輸出: -1
解釋: 不存在
思路
動態規劃:
f(x)=min+1 , i=1,2,3…n 這是遞推公式,f(x)表示湊足x的錢最少的硬幣數。其中f(0)=0
//通過動態規劃來解決
func
coinchange
(coins [
]int
, amount int
)int
dp:=
make([
]int
,amount+1)
dp[0]
=0for i :=
1yi; i < amount+
1; i++
if min == math.maxint64
else}}
return dp[amount]
}
給定不同面額的硬幣和乙個總金額。寫出函式來計算可以湊成總金額的硬幣組合數。假設每一種面額的硬幣有無限個。
注意: 你可以假設
0 <= amount (總金額) <= 5000
1 <= coin (硬幣面額) <= 5000
硬幣種類不超過500種
結果符合32位符號整數
示例1
輸入: amount = 5, coins = [1, 2, 5]
輸出: 4
解釋: 有四種方式可以湊成總金額:
5=55=2+2+1
5=2+1+1+1
5=1+1+1+1+1
示例2輸入: amount = 3, coins = [2]
輸出: 0
解釋: 只用面額2的硬幣不能湊成總金額3。
示例3輸入: amount = 3, coins = [2]
輸出: 0
解釋: 只用面額2的硬幣不能湊成總金額3。
思路
動態規劃:
f(x)=f(x-ci)+f(x) , i=1,2,3…n ,f(0)=1
//通過動態規劃來解決
func
coinchange2
(coins [
]int
, amount int
)int
if amount <0||
len(coins)==0
dp:=
make([
]int
,amount+1)
dp[0]
=1for i:=
len(coins)-1
;i>=
0;i--}}
return dp[amount]
}
LeedCode 零錢置換
給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 1。輸入 coins 1,2,5 amount 11 輸出 3 解釋 11 5 5 1 分析 本題思路是動態規劃處理,狀態陣列f i 表示總錢...
零錢兌換 leetcode
思路 建乙個動態陣列dp,大小為amount 1,dp裡面的值初始化為amount 1。dp i 表示總金額i最少可以用dp i 的零錢兌換,如果coins j 比i小,那麼總金額i可以由dp i conis j 再加上這枚零錢構成,dp i min dp i dp i coins j 1 如果dp...
零錢兌換問題
給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 1。示例 1 輸入 coins 1,2,5 amount 11 輸出 3 解釋 11 5 5 1 示例 2 輸入 coins 2 amount...