You are given coins of different denominations and a total amount of money. Write a function to compute the number of combinations that make up that amount. You may assume that you have infinite number of each kind of coin.
Example 1:
Input: amount = 5, coins = [1, 2, 5]
Output: 4
Explanation: there are four ways to make up the amount:
5=5
5=2+2+1
5=2+1+1+1
5=1+1+1+1+1
Example 2:
Input: amount = 3, coins = [2]
Output: 0
Explanation: the amount of 3 cannot be made up just with coins of 2.
Example 3:
Input: amount = 10, coins = [10]
Output: 1
Note:
You can assume that
For a given amount A, all possible ways to get A can be divided into two cases:
1. No coins[i] is used; 2. At least one coins[i] is used.
So if we iterate through all possible denominations and count up number of ways for each possible amount using only the current selected denomination, the final answer will be the sum of all these at the asked amount.
class Solution { public int change(int amount, int[] coins) { int[] dp = new int[amount + 1]; dp[0] = 1; for(int i = 0; i < coins.length; i++) { for(int j = coins[i]; j <= amount; j++) { dp[j] += dp[j - coins[i]]; } } return dp[amount]; } }
原文:https://www.cnblogs.com/lz87/p/11986697.html