赞
踩
代码实现
package OneDaySuanFa;
import DataStructure.Array.Array;
import java.util.Arrays;
public class HuanChange {
public static int huanchange(int[] coins,int amount){
int n = coins.length;
int[] dp = new int[amount+1];
//dp[i]表示组成总金额i的最少硬币数
Arrays.fill(dp,Integer.MAX_VALUE);
dp[0] = 0;
for (int i = 0; i < n; i++){
for (int j = coins[i]; j <= amount; j++){
if (dp[j-coins[i]] != Integer.MAX_VALUE){
//可以选择放或者不放
dp[j] = Math.min(dp[j-coins[i]] + 1,dp[j]);
}
}
}
if (dp[amount] == Integer.MAX_VALUE) return -1;
return dp[amount];
}
public static void main(String[] args) {
int[] coins = new int[]{1,2,5};
System.out.println(huanchange(coins,20));
}
}
代码实现
package OneDaySuanFa;
public class HuanChange2 {
public static int huanchange2(int[] coins,int amount){
int n = coins.length;
int[] dp = new int[amount + 1];
//dp[i]表示凑成总金额i有多少种方法
dp[0] = 1; //凑成总金额0只有一种方法,即什么都不放
for (int i = 0; i < n; i++){
for (int j = coins[i]; j <= amount; j++){
//可以选择不放或者放入
//这里不放是因为硬币有多个,不放可能是已经放了一个的状态
dp[j] = dp[j] + dp[j-coins[i]];
}
}
return dp[amount];
}
public static void main(String[] args) {
int[] coins = new int[]{1,2,5};
int amount = 11;
System.out.println(huanchange2(coins,amount));
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。