Leetcode Coin Change DP JAVA java.lang.ArrayIndexOutOfBoundsException

时间:2016-10-28 02:41:01

标签: java

我正在研究Leetcode 322 Coin Change上的这个问题。

问题是;您将获得不同面额和总金额的硬币,编写一个函数来计算您需要弥补该金额的最少数量的硬币。如果这笔钱不能由任何硬币组合弥补,则返回-1。

  

示例1

     

币= [1,2,5],金额= 11

     

返回3(11 = 5 + 5 + 1)

     

示例2

     

币= [2],金额= 3

     

返回-1

以下是JAVA DP Solution;

public int coinChange(int[] coins, int amount) {

if(amount==0) return 0;

int[] dp = new int[amount+1];
dp[0]=0; // do not need any coin to get 0 amount
for(int i=1;i<=amount; i++)
    dp[i]= Integer.MAX_VALUE;

for(int i=0; i<=amount; i++){
    for(int coin: coins){
        if(i+coin <=amount){
            if(dp[i]!=Integer.MAX_VALUE){
                if(dp[i+coin] >= dp[i] + 1)
                    dp[i+coin] = dp[i] + 1;
            }
        }
    }
}

if(dp[amount] >= Integer.MAX_VALUE)
    return -1;

return dp[amount];
}

当我使用coins = [1,2147483646], amount = 2运行测试用例时 我总是收到错误消息

  

java.lang.ArrayIndexOutOfBoundsException:-2147483648 for line

     

if(dp [i + coin]&gt; = dp [i] + 1)

我试图理解为什么会这样。我认为硬币值2147483646不会通过此行if(i+coin <=amount)来影响以下代码。正确?

解决了!通过改变if(i + coin&lt; = amount)to if(i + coin&lt; = amount&amp;&amp; i + coin&gt; = 0))

0 个答案:

没有答案