ad1 广告
 
收藏文章 楼主

力扣面试题08.11:如何计算硬币组合数

版块:闲聊杂谈   类型:普通   作者:用意要   查看:12   回复:0   获赞:0   时间:2025-06-28 13:52:20

截图未命名.jpg 力扣面试题08.11:如何计算硬币组合数 动态规划 硬币问题 完全背包 算法优化 C++实现 第1张

一、问题理解

我们需要计算用1分、5分、10分和25分硬币组成n分的所有可能方式数。这是一个典型的完全背包问题

二、算法选择

  1. 动态规划‌:适合解决这种组合计数问题

  2. 完全背包‌:每种硬币可以使用无限次

  3. 有序处理‌:按硬币面值从小到大处理避免重复计数

三、关键实现细节

  1. 初始化‌:dp[0]=1表示0分有1种表示法

  2. 状态转移‌:dp[i] += dp[i-coin]

  3. 取模运算‌:防止整数溢出

四、代码实现

class Solution {
public:
    int waysToChange(int n) {
        const int MOD = 1000000007;
        vector<int> dp(n + 1, 0);
        dp[0] = 1; // 初始化:0分有1种表示法(什么都不选)
       
        // 硬币面值按顺序处理
        int coins[4] = {1, 5, 10, 25};
       
        for (int coin : coins) {
            for (int i = coin; i <= n; ++i) {
                dp[i] = (dp[i] + dp[i - coin]) % MOD;
            }
        }
       
        return dp[n];
    }
};

五、优化思路

  1. 可以优化空间复杂度到O(1),

    数学方法可以进一步优化。

原文:力扣面试题08.11:如何计算硬币组合数

 
ad1 广告位8,870 x auto
回复列表
默认   热门   正序   倒序

回复:力扣面试题08.11:如何计算硬币组合数

Powered by 免费外链论坛

©2015 - 2025 免费外链论坛

免费外链论坛 免费发布外链 发外链平台Sitemap

您的IP:216.73.216.252,2025-07-12 22:57:27,Processed in 0.02749 second(s).

备案信息:浙ICP备2024090696号

声明:本站内容为用户自主发布,不对其内容真实性负责,虽然本站会一一审核,但能力有限,如您发现违规内容,请及时联系管理员。

主页

欢迎您的浏览

QQ联系图标

自助查询

99%的问题都能找到答案

联系站长

工作时间:9:00~17:30

微信二维码

回到顶部

向上滚动到顶部

个人中心

去个人首页看看吧

转到底部

向下滚动到底部

头像

用户名:

粉丝数:

签名:

资料 关注 好友 消息