LeetCode 322. 零钱兑换 - 力扣
题目描述
解题思路
class Solution {
public int coinChange(int[] coins, int amount) {
//dp[i]:表示凑成金额i所需要最少的硬币个数
int[] dp = new int[amount + 1];
Arrays.fill(dp, amount + 1);
dp[0] = 0;
// 外层 for 循环在遍历所有状态的所有取值
for(int i = 1; i <= amount; i ++){
// 内层 for 循环在求所有选择的最小值
for(int coin : coins){
// 子问题无解,跳过
if(i < coin) continue;
dp[i] = Math.min(dp[i], dp[i-coin] + 1);
}
}
return dp[amount] == amount + 1 ? -1 : dp[amount];
}
}