Coin Change
dfs + memoization
dp (tabulation)
第一反应是dfs + memoization,可以通过test,但是非常的慢,不过通常这种组合都可以转换成dp。
接下来判断是否满足dp的条件:optimal substructure,只要确定较小数字的情况,就可以推到较大数字的情况。
overlapping of subproblem,当money amount = 100, 可能会重复算amount = 5的最少组成硬币数量。
dp的话,state: dp[0] = 0, 当money amount = 0的时候,只需要0枚硬币。
其中dp[i]表示钱数为i时的最小硬币数的找零,递推式为:
dp[i] = min(dp[i], dp[i - coins[j]] + 1);
其中coins[j]为第j个硬币,而i - coins[j]为钱数i减去其中一个硬币的值,剩余的钱数在dp数组中找到值,然后加1和当前dp数组中的值做比较,取较小的那个更新dp数组。