gpt4 book ai didi

java - 找零钱的方式数量

转载 作者:行者123 更新时间:2023-11-30 05:34:26 25 4
gpt4 key购买 nike

我正在尝试使用内存和递归来解决硬币找零的问题。但我的代码中有一些小故障,它给了我错误的输出。

    public static int coinChangeMemo(int coins[], int n) {
int [][] memo = new int[n+1][coins.length+1];
for (int row = 0; row < memo.length; row++) {
for (int col = 0; col < memo[row].length; col++) {
memo[row][col] =-1;
}
}
return coinChangeMemoHelper(coins, n, 0, memo);
}


private static int coinChangeMemoHelper(int coins[], int n, int index, int memo[][]) {
if(n == 0) {
return 1;
}
if(index >= coins.length) {
return 0;
}
if(n <= 0) {
return 0;
}

if(memo[n][index] != -1) {
return memo[n][index];
}
int withUsingCurrent = coinChangeMemoHelper(coins, n-coins[0], index, memo);
int withoutUsingCurrent = coinChangeMemoHelper(coins, n, index+1, memo);

memo[n][index] = withUsingCurrent + withoutUsingCurrent;
return withUsingCurrent + withoutUsingCurrent;

}

public static void main(String[] args) {
//coins denominations are 1, 2

int coins[] = {1,2};
//i want a change of 4
int sum = 4;

System.out.println(coinChangeMemo(coins, sum));


硬币面额有 1,2

我想要 4 的总和。

可能的方法是

  1. (1,1,1,1)
  2. (1,2,1)
  3. (2,2)

我期待输出 3,但它返回给我 5

最佳答案

您需要对代码进行 2 处更改:-> 1.您可以将最后 2 个基本情况组合为: if(index==coins.length || n<0){ 返回0; } 2.你在递归调用withUsingCurrent时犯了错误: 像下面这样更新它 int withUsingCurrent = coinChangeMemoHelper(硬币, n-coins[索引], 索引, 备忘录);

关于java - 找零钱的方式数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56898091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com