【问题标题】:Dynamic Programming Coin Change Problem - Print Coins Used Java动态编程硬币找零问题 - 使用 Java 打印硬币
【发布时间】:2020-12-21 16:29:03
【问题描述】:

所以我已经解决了硬币找零的问题,并且我了解它是如何工作的以及一切,但我似乎无法弄清楚如何打印出每个硬币使用了多少。例如,数量为 12,硬币数组为 1、5 和 10,我希望输出如下所示:

Penny.    Nickel.    Dime
12.       0.         0
7.        1.         0
2.        2.         0
2.        0.         1

我将如何打印出来?我目前拥有的代码是:

public class codingChallenge {
public static void main(String[] args) {
    int [] coinsArray = {1, 5, 10};
    System.out.println(change(12, coinsArray));
}

public static int change(int amount, int[] coins){
    int[] combinations = new int[amount + 1];

    combinations[0] = 1;

    for(int coin : coins){
        for(int i = 1; i < combinations.length; i++){
            if(i >= coin){
                combinations[i] += combinations[i - coin];
                System.out.println(coin);
            }
        }
        System.out.println();
    }

    return combinations[amount];
}

}

非常感谢任何帮助。谢谢!

【问题讨论】:

  • @Rahul Jain 我不认为这真的是重复的,因为那是在谈论实际的概念。我正在寻找如何像这样打印出来。我有完整的概念和代码来查找有多少可能的结果,我只需要弄清楚如何显示可能的结果。
  • 您的 change 方法似乎只返回排列数(在本例中为 4),而不是根据需要打印结果所需的实际值集。您能否包含包含硬币集合的代码(或至少生成的数据结构)?

标签: java dynamic-programming coin-change


【解决方案1】:

假设您有一个类似于以下的硬币排列集合

Collection<List<Integer>> permutations = List.of(
        List.of(12, 0, 0),
        List.of(7, 1, 0),
        List.of(2, 2, 0),
        List.of(2, 0, 1)
);

然后您可以通过调用printPermutations 将其转换为表格:

private static final String HEADER = "Penny     Nickel     Dime";
private static final String COIN_FORMAT = "%-10d";

private static void printPermutations(Collection<List<Integer>> permutations) {
    System.out.println(HEADER);
    String output = permutations.stream()
            .map(CoinChange::format)
            .collect(Collectors.joining("\n"));

    System.out.println(output);
}

private static String format(List<Integer> permutation) {
    return permutation.stream()
            .map(i -> String.format(COIN_FORMAT, i))
            .collect(Collectors.joining());
}

这显然假设排列在您的标题中包含相同硬币的值。您可以引入Coin 类或枚举并使用Map&lt;Coin, Integer&gt; 而不是List&lt;Integer&gt; 使解决方案更加灵活,但概念将保持不变。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-08
    • 2020-09-22
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    相关资源
    最近更新 更多