Given an infinite number of quarters (25 cents), dimes (10 cents), nickels (5 cents), and pennies (1 cent), write code to calculate the number of ways of representing n cents. (The result may be large, so you should return it modulo 1000000007)
Example1:
Input: n = 5
Output: 2
Explanation: There are two ways:
5=5
5=1+1+1+1+1
Example2:
Input: n = 10
Output: 4
Explanation: There are four ways:
10=10
10=5+5
10=5+1+1+1+1+1
10=1+1+1+1+1+1+1+1+1+1
Notes:
You can assume:
- 0 <= n <= 1000000
题目链接:https://leetcode-cn.com/problems/coin-lcci/
思路
每次考虑多加一种硬币,每轮多加一个该面值的硬币。
每次往pd数组中新覆盖的值肯定都是在前面硬币的组合的基础计算的。
class Solution {
public:
int waysToChange(int n) {
if(n<=0) return 0;
if(n<5) return 1;
vector<int> dp(n+1, 0);
dp[0] = 1;
int num[] = {1,5,10,25};
for (int c = 0; c < 4; ++c) {
int coin = num[c];
for (int i = coin; i <= n; ++i) {
dp[i] = (dp[i] + dp[i - coin]) % 1000000007;
}
}
return dp[n] % 1000000007;
}
};