一、问题理解
我们需要计算用1分、5分、10分和25分硬币组成n分的所有可能方式数。这是一个典型的完全背包问题。
二、算法选择
三、关键实现细节
初始化:dp[0]=1表示0分有1种表示法
状态转移:dp[i] += dp[i-coin]
取模运算:防止整数溢出
四、代码实现
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]; }};
五、优化思路
可以优化空间复杂度到O(1)
数学方法可以进一步优化
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦