/*
给您不同面额的硬币和总金额.编写一个函数来计算组成该数量所需的最少数量的硬币.
如果这笔钱不能用硬币的任何组合弥补,则返回-1.
Example 1:
coins = [1, 2, 5], amount = 11
return 3 (11 = 5 + 5 + 1)
Example 2:
coins = [2], amount = 3
return -1.
解题思路:
递归算法不可取,会导致大量的数据重复计算。优先选择动态规划
*/
Go语言实现
package main
import "fmt"
func coinCount( coin []int,target int) int{
dp:=make([]int,target+1)
for i:=1;i<=target;i++{
dp[i]=target+1
}
dp[0]=0
for i:=1;i<=target;i++{
for j:=0;j<len(coin);j++{
if i>=coin[j]{
dp[i]=minvalue(dp[i-coin[j]]+1,dp[i])
}
}
}
if dp[target]>target{
return -1
}else{
return dp[target]
}
}
func minvalue(a,b int)int{
if a>b{
return b
}else{
return a
}
}
func main(){
fmt.Println("给定硬币和总金额,求出最少的组合个数")
coin:=[]int{2,5,7}
fmt.Pri