硬币更改算法总是返回一个

时间:2011-10-30 15:37:50

标签: java recursion dynamic-programming coin-change

/**
 * 
 * @param d
 *            currency divisions
 * @param p
 *            target
 * @return number of coins
 */
public static int change(int[] d, int p) {
    int[] tempArray = new int[p*2]; // tempArray to store set
                                                    // of coins forming
                                                    // answer
    for (int i = 1; i <= p; i++) { // cycling up to the wanted value
        int min = Integer.MAX_VALUE; //assigning current minimum number of coints
        for (int value : d) {//cycling through possible values
            if (value <= i) {
                if (1 + tempArray[i - value] < min) { //if current value is less than min
                    min = 1 + tempArray[1 - value];//assign it
                }
            }
        }
        tempArray[i] = min; //assign min value to array of coins
    }
    return tempArray[p];
}

任何人都可以帮我看看为什么这不起作用吗?该方法意味着给出表示硬币的值的输入,它具有无限数量的这些用于形成整数p的coint,该方法是返回用于获得p的最小硬币数。

1 个答案:

答案 0 :(得分:1)

tempArray在所有索引上初始化为0。 使用tempArray [1-value]基本上给你0。 因此,从1到p的所有索引都具有值1 + tempArray [1-value] 这是1.此外,tempArray [1-value]是一个negetive索引。我认为你的意思是tempArray [i-value]