我试图解决Leetcode问题322。这是从网站上引用的描述。
您将获得一个整数数组,表示不同面额的硬币,以及一个整数金额,表示总金额。
返回您需要的最少数量的硬币,以弥补该金额。如果这些硬币的任何组合都无法弥补这一数额,则返回-1。
你可以假设每种硬币的数量是无限的。
我已经编写了两个递归解决方案,一个是Python,一个是Javascript。出于某种原因,Javascript中的代码不能为相同的输入生成正确的值,而Python中的代码总是这样。
我想问一下,是否有人知道产出差异的原因。我尝试了以下测试用例:
coins = [1,2,5], amount = 11 => Expected: 3
coins = [1,2], amount = 2 => Expected: 1
下面是我用各自的语言编写的代码。
Javascript
var coinChange = function(coins, amount) {
coins = coins.sort((a,b) => b -a )
ans = helper(coins, amount, 0)
if (ans >= Number.MAX_VALUE) {
return -1
}
return ans;
};
function helper(coins, amount, pos) {
if (pos >= coins.length || amount < 0) {
return Number.MAX_VALUE;
} else if (amount === 0) {
return 0;
}
left = helper(coins, amount - coins[pos], pos) + 1
right = helper(coins, amount, pos + 1)
return Math.min(left, right)
}
使用上述两个测试用例,两个测试用例都是错误的。
coins = [1,2,5], amount = 11 => Expected: 3, gets 2
coins = [1,2], amount = 2 => Expected: 1, gets 2
python
def coinChange(coins, amount):
coins = sorted(coins, reverse = True)
ans = helper(coins, amount, 0)
if (ans >= float("inf")):
return -1
return ans
def helper(coins, amount, pos):
if (pos >= len(coins) or amount < 0):
return float("inf")
elif (amount == 0):
return 0
left = helper(coins, amount - coins[pos], pos) + 1
right = helper(coins, amount, pos + 1)
return min(left, right)
使用上面的两个测试用例,它可以使两个测试都正确。
coins = [1,2,5], amount = 11 => Expected: 3, gets 3
coins = [1,2], amount = 2 => Expected: 1, gets 1
Javascript代码通过向每个递归调用的返回值添加let
来获得预期的答案。例如,将↓=helper(硬币,数量-硬币[pos],pos)1更改为↓=helper(硬币,数量-硬币[pos],pos)1
我在理解动态规划中的硬币兑换问题时遇到了一个小问题。简单地说,我必须用最少数量的硬币来兑换一笔钱。 我有n种面值为1=v1的硬币
我试图使用贪婪算法来计算在JavaScript中达到一定数量所需的最低硬币数量 返回结果将是一个数组,由每个级别的硬币数量组成 我决定做一个函数来解决这个问题,但它不起作用 calculateChange函数包含两个参数:硬币值数组和金额。 第一步是初始化一个sum变量,该变量显示已调度的更改量。我还将创建一个数组变量,该变量将保存某个硬币的分配次数。 为此,我将迭代coins数组并将所有值设置为
我在Cplex中使用Python API来解决一个线性编程问题。使用Cplex时,我的结果如下: 但随后我将LP prolem保存为LP文件,并再次使用Cplex进行求解,结果与第一个略有不同: 下面是我的功能:
我一直在使用动态规划研究硬币兑换问题。我尝试制作一个数组fin[],其中包含索引所需的最小硬币数,然后打印它。我已经写了一个代码,我认为应该给出正确的输出,但我不明白为什么它没有给出准确的答案。例如:对于输入:4 3 1 2 3(4是要更改的金额,3是可用硬币的类型,1 2 3是硬币值列表)输出应该是:0 1 1 2(因为我们有1,2,3作为可用硬币,需要0个硬币更改0,1个硬币更改1,1个硬币更
我试图自己解决LeetCode问题322。硬币兑换: 您将获得一个整数数组,表示不同面额的硬币,以及一个整数金额,表示总金额。 返回您需要的最少数量的硬币,以弥补该金额。如果这些硬币的任何组合都无法弥补这一数额,则返回-1。 你可以假设每种硬币的数量是无限的。 我似乎有一个错误,无法找出它。 我用DFS解决,基本上是说当目标达到0时,只需将所有的聚集在一个数组中,并动态地保持尽可能短的结果。这是问
这是代码: 如果我在我的机器()或这里()上尝试: 相反,这里(): 这是不同的。这是由于机器厄普西隆?还是编译器精度标志?还是不同的评估? 造成这种漂移的原因是什么?问题似乎出现在函数中(因为其他值似乎相同)。