Java 硬币兑换算法总是返回一个 /** * *@param d *货币划分 *@param p *目标 *@返回的硬币数量 */ 公共静态整数更改(int[]d,int p){ int[]tempArray=new int[p*2];//存储集的tempArray //硬币的形成过程 //答复 对于(int i=1;i
tempArray,在所有索引上都初始化为0。 使用tempArray[1-value]基本上可以得到0。 因此,从1到p的所有索引的值都是1+tempArray[1-value]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所
这是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];
}