动态规划——硬币组合问题

该博客探讨了一个使用动态规划算法解决寻找特定金额硬币组合的问题。代码示例展示了如何在Java中实现,考虑了不同面值的硬币,并处理了特殊情况,如总金额为0或无可用硬币的情况。动态规划方法有效地计算了所有可能的组合数量。
摘要由CSDN通过智能技术生成

给定一个总的钱数,在给定几个固定面值的硬币,请问有多少种组合方法,可以得到总的钱数

package com.Leetcode.动态规划;

/**
 * @author
 * @date 2020/9/27
 * 给定一个总的钱数,在给定几个固定面值的硬币,请问有多少种组合方法,可以得到总的钱数
 * 特殊情况考虑:
 * (1)总的钱数为0,组合的话只有一种;
 * (2)硬币集合为0,组合的话只有0中。
 *
 * 从一种硬币情况考试考虑:
 * 假设只有2元的硬币;则:
 */
public class MoneyAmount {
    public static void main(String[] args) {
        //总的钱数是100元
        int totalMoney = 100;
        //有1元,2元和5元的硬币若干
        int[] moneys = new int[]{1,2,5};

        int result = getTotalNum(totalMoney,moneys);

        System.out.println(result);
    }

    /**
     * 求出所有的可能的组合
     * @param totalMoney
     * @param moneys
     * @return
     */
    private static int getTotalNum(int totalMoney, int[] moneys) {
        int[] dp = new int[totalMoney+1];
        dp[0]=1;
        for(int money:moneys){
            for (int  x=money ;  x< totalMoney+1 ; x++) {
                dp[x] = dp[x]+dp[x-money];
                System.out.println(dp[x]);
            }
        }
        return dp[totalMoney];
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值