解决Java中的硬币找零问题

解决Java中的硬币找零问题

 

在本教程中,我们期待使用动态编程解决最常见的面试问题之一“硬币找零”。

使用Java中的有效方法解决硬币找零问题

在动态编程方法中,我们使用额外的空间复杂度dp [amount + 1]并存储先前的结果。我们取一枚硬币,并开始存储组成一定数量所需的硬币数量(通过迭代到原始数量)。然后,我们用当前所需的最小硬币数和使用该特定硬币的所需硬币数来更新dp [i]。然后只需检查是否有一些结果达到dp [amount],否则返回-1表示不可能补足该数量。

让我们为此编写代码。

import java.util.*;

public class Main {

    public static void main(String args[]) {
        int coins[] = { 1, 2, 5};
        int amount = 11;

        int dp[] = new int[amount+1];
        dp[0] = 0;

        for(int i = 1; i <= amount; i++){
            dp[i] = amount+1;
        }

        for(int coin : coins){
            for(int amt = 1; amt <= amount ; amt++){
                if(amt >= coin){
                    dp[amt] = Math.min(dp[amt], 1 + dp[amt - coin]);
                }
            }
        }
        int minCoinsReq = dp[amount] != amount+1 ? dp[amount] : -1 ; 

        System.out.println("Minimum Coins required : " + minCoinsReq);
    }
}

 

输出 :
最低硬币要求:3

在上面的代码中,我们只是创建了一个数组,以保留可以由任何硬币和达到该硬币所需的最小硬币数量来求和的金额。对于每个硬币重复此操作,我们可以达到收集特定数量所需的最小硬币数量。因此,我们达成了解决方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值