https://leetcode-cn.com/problems/coin-change/description/
public static int coinChange(int[] coins, int amount)
{
//dp[amount]=min(dp[amount-coins[i]])+1
if(amount==0)
{
return 0;
}
int dp[]=new int[amount+1];
Arrays.fill(dp, Integer.MAX_VALUE-1);
dp[0]=0;
for(int i=1;i<=amount;i++)
{
for(int j=0;j<coins.length;j++)
{
if(i>=coins[j])
{
dp[i]=Math.min(dp[i-coins[j]]+1, dp[i]);//用当前硬币 不用当前硬币
//System.out.println("dp"+i+"="+dp[i]);
}
}
}
if(dp[amount]==Integer.MAX_VALUE-1)//无法完成
{
return -1;
}
else
{
return dp[amount];
}
}
填充Integer.MAX_VALUE-1的目的是防止溢出
如输入coins为[2] amount为3时
dp[0]为0
dp[1]为Integer.MAX_VALUE-1
dp[2]时min中为Integer.MAX_VALUE与Integer.MAX_VALUE-1的对比 可以取得正确值
而填充时不-1就会出现错误