问题一
1.问题描述
假设有几种硬币,如1、3、5,并且数量无限。请找出能够组成某个数目的找零所使用最少的硬币数。
2.问题分析
动态规划的思想,用 dp[] 存放自底向上问题的解。dp[] 大小为 amount,dp[k] = min(dp[k - coin[i]) + 1
3.Java实现
public int coinChange(int[] coins, int amount) {
int max = amount + 1;
int[] dp = new int[amount + 1];
//先令 dp[] 初始化为 amount + 1
Arrays.fill(dp, max);
//当 amount = 0 时,解也是 0
dp[0] = 0;
for (int i = 1; i <= amount; i++) {
for (int j = 0; j < coins.length; j++) {
if (coins[j] <= i) {
dp[i] = Math.min(dp[i], dp[i - coins[j]] +