【发布时间】:2017-03-19 06:21:33
【问题描述】:
我正在用javascript解决这个问题“改变”:
问题:
给定金额,一组硬币面额,计算 用可用硬币赚钱的方法数量 教派。
例子:
对于金额=4 (4¢) 和面额=[1,2,3] (1¢, 2¢ 和 3¢),你的程序会输出 4——制作方法的数量 4¢ 与这些面额:
1美分,1美分,1美分,1美分
1美分,1美分,2美分
1美分,3美分
2美分,2美分
我找到了解决办法:
var makeChange = function(total){
var count = 0;
var coins = [1, 2, 5, 10, 20, 50, 100, 200];
var changer = function(index, value){
var currentCoin = coins[index];
if( index === 0){
if( value % currentCoin === 0){
count++;
}
return;
}
while( value >= 0 ){
changer(index-1, value);
value -= currentCoin;
}
}
changer(coins.length-1, total);
return count;
};
makeChange(200);
问题:
- 有人可以向我解释发生了什么吗?我尝试按照代码进行操作,但在递归之间迷失了方向。
我知道他正在计算最终的硬币价值,并从给定的总数中减去。 (但为什么?)我有点迷路了。
- 当 while 循环中 value >= 0 时,它不断循环增加索引,我不明白为什么。
有人能理解这个算法吗?
抱歉,刚开始学习动态编程。
谢谢,
【问题讨论】:
-
"and denominations=[1,2,3][1,2,3] (11¢, 22¢ and 33¢)" - 我被困在理解那部分。如果允许的面额是 11、22 和 33,为什么要表示为 [1,2,3][1,2,3]?那应该是两个数组,还是一个二维数组,还是?
-
@nnnnnn 谢谢。对不起,我很抱歉,这是一个错字。 (复制粘贴错误)。更新了问题。
标签: javascript algorithm dynamic-programming