当前位置: 首页 > 知识库问答 >
问题:

给硬币换零钱的方法有很多

赫连瀚
2023-03-14

我试图用记忆和递归来解决硬币兑换的问题。但是我的代码中有一些小故障,它给了我错误的输出。

    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

共有1个答案

邹晟睿
2023-03-14

你需要对你的代码做2个修改:-

 类似资料:
  • 我试图找出如何解决一个问题,这似乎是一个常见算法问题的棘手变化,但需要额外的逻辑来处理特定的需求。 给定一个硬币列表和一个数量,我需要计算使用无限量可用硬币提取给定数量的可能方法的总数(这是一个典型的改变决策问题)https://en.wikipedia.org/wiki/Change-making_problem 使用动态规划(dynamic programming)轻松解决,同时满足一些附加要

  • 我正在做一个java分配,在那里你输入一个对象的价格和一个理论客户交给你的物品的金额。然后程序返回你欠他们的钱,并将其分解为你应该给他们的美元、二十五美分、一角美分、五美分和便士。

  • 我有这样的数据集: 长度:233333450560650780限制:5400 现在我的问题是,从设定的最高长度到最低长度中选择项目,以弥补限制或尽可能接近。 我知道背包和最小硬币兑换都能解决我的问题。我想知道哪个更好。 请注意,硬币变化是使用贪婪算法,背包使用动态编程

  • 问题是用硬币、一角硬币、五分硬币和一便士来换零钱,并且使用最少的硬币总数。在四个面值分别是硬币、一角硬币、五分硬币和一便士的特殊情况下,我们有c1=25、c2=10、c3=5和c4=1。 如果我们只有四分之一硬币、一角硬币和一分硬币(没有五分镍币)可供使用,贪婪算法将使用六枚硬币——四分之一硬币和五便士——兑换30美分,而我们可以使用三枚硬币,即三个一角硬币。 给定一组面额,我们如何判断贪婪方法是

  • 问题内容: 为此,我想将硬币兑换功能转换为记忆功能 ,因此我决定使用字典,以便字典中的键将是硬币,而值将是包含所有可更改“钥匙”的硬币的列表。硬币。 我所做的是: 我想得到一些建议,或者也许有另一种方法可以做到这一点。 谢谢。 编辑 备注版本: 问题答案: 当您可以只使用通用的预先编写的装饰器时,不必编写专门的记忆装饰器。例如,直接来自 PythonDecoratorLibrary 的以下 代码

  • 动态规划变更问题(有限硬币)。我正在尝试创建一个以以下内容作为输入的程序: 输出: 输出应该是大小为1的数组,其中每个单元格代表我们需要改变单元格索引量的最佳硬币数。 假设数组的单元格位于index: 5,内容为2。这意味着为了给出5(INDEX)的变化,您需要2(单元格的内容)硬币(最佳解决方案)。 基本上,我需要这个视频的第一个数组的输出(C[p])。这与有限硬币的大区别是完全相同的问题。链接