322. 零钱兑换
最开始考虑成选几个或不选的情况,这样写超时。只需要考虑选或不选这个数一次,选的话i(当前选择的数)不变,只是改变剩下需要凑的数值。
Solution1:递归+备忘录
class Solution:
def coinChange(self, coins: List[int], amount: int) -> int:
target=amount
@cache
def dfs(target,i):
if i<0:
return 0 if target==0 else inf
if target==0:
return 0
if target<coins[i]:
return dfs(target,i-1)
return min(dfs(target,i-1),dfs(target-