322.零钱兑换
一.题目分析:
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。
你可以认为每种硬币的数量是无限的。
-
确定base case(特殊基本情况): 当amount = 0 返回0 ,当amount < 0 ,返回-1
-
状态转移:
# 假设 coins = [c1,c2,c3] amount = [n] # 定义一个函数ncc(need_coin_count需要硬币数量),返回值是需要的硬币数量,参数m是金额 def ncc(m): return count # 那么想获得题目给出的结果res,则 res = min(1+ncc(amount - c1), 1+ncc(amount - c2), 1+ncc(amount - c3)) # 所需硬币数量 = 1 + 去除一个硬币金额后所需硬币数量 # 通过这种方式一直递归到 去除一个硬币后的金额为0或者<0的时候: # 如果为0,则刚好 # 如果<0 ,则说明去除的这个硬币不合理,res就不是min(1+ncc(amount - c1),1+ncc(amount - c2)...) # 而是一个不合理的值(提前可定义)
二.暴力递归
-
伪代码
class Solution