package main import "fmt" func main() { /* 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。 如果没有任何一种硬币组合能组成总金额,返回 -1。 示例 1: 输入: coins = [1, 2, 5], amount = 11 输出: 3 解释: 11 = 5 + 5 + 1 */ /* 1.先把最大的数找出来,累加,超了就找小于自己的数 2.再继续找倒数第二大的数,累加,超了就找小于自己的数,。。。 */ coins := []int{1, 2, 5} amonut := 100 //20次 //标志位 flag := 0 //总金额 sum := 0 //5块 for amonut > sum { max_sum := coins[2] sum += max_sum flag += 1 if amonut < sum { //如果超过了就减去一次最大数 sum -= max_sum flag -= 1 break } else if amonut == sum { fmt.Println(flag) } } //3块 //减去一次最大数的sum肯定小于amonut for amonut > sum { max_sum_2 := coins[1] sum += max_sum_2 flag += 1 if amonut < sum { sum -= max_sum_2 flag -= 1 break } else if amonut == sum { fmt.Println(flag) } } //1块 //减去一次 次 大数的sum肯定小于amonut for amonut > sum { max_sum_3 := coins[0] sum += max_sum_3 flag += 1 if amonut < sum { sum -= max_sum_3 flag -= 1 break } else if amonut == sum { fmt.Println(flag) } } }