public int coinChange(int[] coins, int amount) { //初始化dp表 int[] dp = new int[amount+1]; //因为是求最小值,所以默认值是一个无穷大,对于本题,amount+1也是无穷大 for (int i = 0; i < amount+1; i++) { dp[i]=amount+1; } dp[0]=0; //穷举所有潜在子问题,本题就是目标金额的子问题穷举 for (int i = 0; i < dp.length; i++) { //每个子问题的可选列表 for (int coin : coins) { //结束条件:目标金额-硬币面值 if(i-coin<0) continue; //转移方程 dp[i] = Math.min(dp[i], 1 + dp[i - coin]); } } return (dp[amount] == amount + 1) ? -1 : dp[amount]; }
原文:https://www.cnblogs.com/karbon/p/14498630.html