面试题 08.11. 硬币(动态规划)
面试题 08.11. 硬币
硬币。给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007)
示例1:
输入: n = 5 输出:2 解释: 有两种方式可以凑成总金额: 5=5 5=1+1+1+1+1
示例2:
输入: n = 10 输出:4 解释: 有四种方式可以凑成总金额: 10=10 10=5+5 10=5+1+1+1+1+1 10=1+1+1+1+1+1+1+1+1+1
说明:
注意:
你可以假设:
- 0 <= n (总金额) <= 1000000
1 class Solution { 2 public: 3 int waysToChange(int n) { 4 vector<int> targets = {1, 5, 10, 25}; 5 vector<int> dp(n + 1, 0); 6 dp[0] = 1; 7 // 枚举每种币值 8 for (auto target : targets) { 9 for (int i = target; i <= n; i++) { // dp[i] : 拼成价值为i的方案数,分为最后一枚硬币不选择(dp[i])和最后一枚硬币选择dp[i - target] 10 dp[i] = (dp[i] + dp[i - target]) % 1000000007; 11 } 12 } 13 return dp[n]; 14 } 15 };
浙公网安备 33010602011771号