Java 什么';这种硬币兑换问题的解决方案有什么问题吗?

Java 什么';这种硬币兑换问题的解决方案有什么问题吗?,java,dynamic-programming,Java,Dynamic Programming,以下是hackerrank()的硬币兑换问题。 它要求使用给定面额的硬币来计算改变N的方法总数 例如,有四种方法可以使用面额为1、2和3的硬币兑换4。 它们是-{1,1,1,1}、{1,1,2}、{2,2}、{1,3}。 我试图用java中的动态编程实现一个递归解决方案。我的解决方案是基于这样一个想法,即对于给定面额的每一枚硬币,我们都会反复尝试,看看是否可以通过选择硬币来达到总数。如果选择当前硬币的结果是解决方案,我们将更新所有方法。但解决方案不起作用 下面是实现 公共静态长通道(长n,长[]

以下是hackerrank()的硬币兑换问题。 它要求使用给定面额的硬币来计算改变N的方法总数

例如,有四种方法可以使用面额为1、2和3的硬币兑换4。 它们是-
{1,1,1,1}、{1,1,2}、{2,2}、{1,3}。

我试图用java中的动态编程实现一个递归解决方案。我的解决方案是基于这样一个想法,即对于给定面额的每一枚硬币,我们都会反复尝试,看看是否可以通过选择硬币来达到总数。如果选择当前硬币的结果是解决方案,我们将更新所有方法。但解决方案不起作用

下面是实现

公共静态长通道(长n,长[]c){
Map Map=newhashmap();
返回乐趣(n,c,0,map);
}
公共静态长乐趣(长n,长[]c,内部i,地图备忘录){
如果(n==0)返回1;
如果(i>=c.length)返回0;
如果(n
这给了我错误的答案。例如,有5种方法可以使用
{2,5,3,6}
的硬币对10进行更改,但它会返回4作为输出


我错在哪里?

乍一看,如果高于剩余值的硬币位于数组中第I个位置之前,您的解决方案将跳过解决方案。考虑n=5和c=[10,5]的情况。答案应该是1

在代码中,它将进入if语句检查if n
if(n < c[i]) return 0;
if(n

并且将返回0。

乍一看,如果高于剩余值的硬币位于数组中第i个位置之前,您的解决方案将跳过解决方案。考虑n=5和c=[10,5]的情况。答案应该是1

在代码中,它将进入if语句检查if n
if(n < c[i]) return 0;
if(n

并且将返回0。

fun(n,c,i+1,memo)+fun(n-c[i],c,i
+1,memo)@gurvindersingh不,不是。不同的方法很好地澄清了关于他个人代码的具体问题。
fun(n,c,i+1,memo)+fun(n-c[i],c,i
+1
,memo)@gurvindersingh不,不是。不同的方法,很好地澄清了关于他个人代码的具体问题。