package com.daily.daily20210127;
import java.util.Arrays;
/**
* @Project: dailyCode
* @Site: http://www.zhao1iang.club/
* @Copyright: ©CodeLamp
* @Author: zhaoliang
* @Create: 2021-01-27 14:51
* @Desc: 零钱兑换
**/
public class coinChange {
//给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。
//
//你可以认为每种硬币的数量是无限的。
//01 背包
public int coinChange(int[] coins,int amount){
//给0占位
int[] dp = new int[amount+1];
//比较的是最小值,不可能的值赋值成为一个最大值
Arrays.fill(dp,amount+1);
//dp[0] =0;单独一枚硬币可以凑出合理值
dp[0] =0;
for (int i = 1; i <=amount ; i++) {
for (int coin:coins
) {
if (i -coin >=0 && dp[i-coin]!=amount+1){
dp[i] = Math.min(dp[i],dp[i-coin]+1);
}
}
}
if (dp[amount] == amount+1 ){
dp[amount] = -1;
}
return dp[amount];
}
}
日常刷题-零钱兑换
最新推荐文章于 2024-04-24 22:51:49 发布