题目描述

一张整钱分成N张零钱,如果不能则返回-1,如果能返回最少的组合
比如10=5+5=5+2+2+1=5+1+1+1+1

首次尝试(DFS)

按照现实的逻辑结合剪枝算法首先想到是的深度优先遍历DFS。理想情况下,10=5+5立马就得出了最优解,但运行起来却不尽人意。

再次尝试(BFS)

原本想的既然DFS无法解决超时问题,BFS也应该不行吧。结果BFS却没有超时,仔细分析后才发现BFS效率是DFS的L倍(L为零钱的长度)

最终尝试(动态规划)

可以看作一个满完全背包问题的一个变种,用空间来换取时间
f[j] = min(f[j], f[j - coins[i]] + 1);