例如:如果我有硬币:[6,11],我需要最小的硬币来获得13,那么答案应该是2(11,6),这些是最小的硬币数量。
现在我需要打印组成这个答案的实际硬币。
private int minCapacity(int capacity[], int total, Map<Integer, Integer> map)
{
// base case
if (total<= 0)
{
return 0;
}
//if map contains the result means we calculated it before. Lets return that value.
if (map.containsKey(total))
{
return map.get(total);
}
// Initialize result
int res = Integer.MAX_VALUE;
for (int i = 0; i < capacity.length; i++)
{
//allResults.add(capacity[i]);
int subRes = minCapacity(capacity, total- capacity[i], map);
System.out.println("total : " + subRes + ", staff: " + capacity[i]);
//if val we get from picking coins[i] as first coin for current total is less
// than value found so far make it minimum.
if (subRes < res)
{
res = subRes;
coinsRes.put(total, capacity[i]);
}
}
res = (res == Integer.MAX_VALUE) ? res : res + 1;
//memoize the minimum for current total.
map.put(total, res);
return res;
}
这是输出:
总计: 1-
现在,公式应该是:循环到:Max(total)-容量(total),直到结果小于或等于零。
面额为:每个单位的容量(总数)
记住什么项目capacity[i]
或indexi
给出了最好的subres
将其存储在地图的其他字段中。
最后,从贴图中展开最佳序列。
问题-你会得到不同面额的硬币和总金额。写一个函数来计算你需要的最少数量的硬币来组成这个数量。那里有无限的硬币供应。 我的方法——我遵循了自上而下的方法,但是使用map stl进行记忆,我得到了TLE。请帮助找出误差和估计时间复杂度。 这是我的密码-
我在理解动态规划中的硬币兑换问题时遇到了一个小问题。简单地说,我必须用最少数量的硬币来兑换一笔钱。 我有n种面值为1=v1的硬币
如果每枚硬币的数量是无限的,那么复杂性是O(n*m),其中是总变化,是硬币类型的数量。现在,当每种类型的硬币都受到限制时,我们必须考虑剩余的硬币。我设法使它与的复杂性使用另一个大小的,所以我可以跟踪每个类型的剩余硬币。有没有一种方法可以让复杂性变得更好?编辑:问题是计算进行精确给定更改所需的最少硬币数量以及我们使用每种硬币类型的次数
具体而言,问题是: 给定面额数组<代码>硬币[],每个硬币的限制数组<代码>限制[]和数量<代码>金额,返回所需的最小硬币数量,以获取<代码>金额,或者如果不可能,返回空值。另外,用溶液中使用的每个硬币的数量填充数组 这是我的解决方案: 但它一般不起作用。 我的问题是,例如,在这种情况下: 最佳解决方案是: 并且我的算法给出作为结果。换句话说,它失败了,每当在某种情况下,我将不得不使用比可能的更少
尝试[解决]leetcode(322)中的问题: 你会得到不同面额的硬币和总金额。写一个函数来计算你需要的最少数量的硬币来组成这个数量。如果这些硬币的任何组合都不能弥补这个金额,返回-1。 我被困在这个输入:硬币=[2]和目标=3 我想知道它为什么返回0?我调试了这个,但没能弄清楚。
给定一组硬币面额和一个,找出所有可能的组合,使硬币总数达到最小。在我的解决方案中,我在中记录了总计为的最小硬币数。我不确定这将如何修改以存储总计为的实际硬币,并确保在这种情况下包括这两种可能性。我看过其他关于堆栈溢出的代码,但我只找到可以打印任何一个最佳解决方案的代码。 输入:最小硬币(10,[2,3,5,6,7,8]) 输出:[[5,5],[2,8]]