LeetCode 518. Coin Change II

原题链接在这里:https://leetcode.com/problems/coin-change-2/

题目:

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

  • 0 <= amount <= 5000
  • 1 <= coin <= 5000
  • the number of coins is less than 500
  • the answer is guaranteed to fit into signed 32-bit integer

题解:

Let dp[i] denote up to amount i, the number of combinations.

dp[0] = 1

dp[i] += dp[i - coin]  

Time Complexity: O(amount * n). n = coins.length.

Space: O(amount).

AC Java:

 1 class Solution {
 2     public int change(int amount, int[] coins) {
 3         if(amount < 0 || coins == null){
 4             return 0;
 5         }
 6         
 7         int [] dp  = new int[amount + 1];
 8         dp[0] = 1;
 9         
10         for(int coin : coins){
11             for(int i = 1; i <= amount; i++){
12                 if(i - coin < 0){
13                     continue;
14                 }
15                 
16                 dp[i] += dp[i - coin];
17             }
18         }
19         
20         return dp[amount];
21     }
22 }

类似Coin ChangeNumber of Dice Rolls With Target SumNumber of Ways to Build House of Cards.

posted @ 2020-01-15 08:17  Dylan_Java_NYC  阅读(246)  评论(0编辑  收藏  举报