Java 硬币兑换算法总是返回一个 /** * *@param d *货币划分 *@param p *目标 *@返回的硬币数量 */ 公共静态整数更改(int[]d,int p){ int[]tempArray=new int[p*2];//存储集的tempArray //硬币的形成过程 //答复 对于(int i=1;i

Java 硬币兑换算法总是返回一个 /** * *@param d *货币划分 *@param p *目标 *@返回的硬币数量 */ 公共静态整数更改(int[]d,int p){ int[]tempArray=new int[p*2];//存储集的tempArray //硬币的形成过程 //答复 对于(int i=1;i,java,recursion,dynamic-programming,coin-change,Java,Recursion,Dynamic Programming,Coin Change,tempArray,在所有索引上都初始化为0。 使用tempArray[1-value]基本上可以得到0。 因此,从1到p的所有索引的值都是1+tempArray[1-value] 这是1。另外,tempArray[1-value]是一个负索引。我想你指的是tempArray[I-value]太棒了,我刚刚把你提到的行从1-value改成了I-value,它可以工作了。你认为这是正确的吗?我真的很困惑,一行一行地发生了什么,你能给我一个简要的概述吗?它会递增地检查从1到p的每个整数,即获得th所

tempArray,在所有索引上都初始化为0。 使用tempArray[1-value]基本上可以得到0。 因此,从1到p的所有索引的值都是1+tempArray[1-value]
这是1。另外,tempArray[1-value]是一个负索引。我想你指的是tempArray[I-value]

太棒了,我刚刚把你提到的行从1-value改成了I-value,它可以工作了。你认为这是正确的吗?我真的很困惑,一行一行地发生了什么,你能给我一个简要的概述吗?它会递增地检查从1到p的每个整数,即获得th所需的最小面额e值,如果您想知道有多少面额为{1,2,3,4}的硬币你需要总共10吗?代码从1开始,检查所需硬币的最小数量,然后是2,然后是3,等等。你可以把它分成10个4个+4个+2个,4个值是1个,8个值是2,最后在1个值是。定额
/**
 * 
 * @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];
}