动态规划
递推方程:
dp[i]: 达到金钱i使用的最少的兑换次数
dp[i]= min(dp[i],dp[i-coins[j]]+1) j=0...coins.lemgth
代码:
public static void main(String[] args) {
// int[] coins = {1, 2, 5};
// int amount = 11;
int[] coins = {2};
int amount = 3;
int num = coinChange(coins, amount);
System.out.println(num);
}
/**
* @Description: 动态规划 零钱兑换 dp[i]= min(dp[i],dp[i-coins[j]]+1) j=0...coins.lemgth
* @param
* @Date: 2020/2/5 17:42
* @Author: fuguowen
* @Return
* @Throws
*/
public static int coinChange(int[] coins, int amount) {
int[] dp=new int[amount+1];
for(int i=1;i<amount+1;i++){
dp[i]=amount+1;
}
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]]+1);
}
}
}
return dp[amount]>amount?-1:dp[amount];
}