# Coin Change 2 – Leetcode Solution

In this post, we are going to solve the 518. Coin Change 2 problem of Leetcode. This problem 518. Coin Change 2 is a Leetcode medium level problem. Let’s see the code, 518. Coin Change 2 – Leetcode Solution.

## Problem

You are given an integer array `coins` representing coins of different denominations and an integer `amount` representing a total amount of money.

Return the number of combinations that make up that amount. If that amount of money cannot be made up by any combination of the coins, return `0`.

You may assume that you have an infinite number of each kind of coin.

The answer is guaranteed to fit into a signed 32-bit integer.

### 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
``````

### Constraints

• `1 <= coins.length <= 300`
• `1 <= coins[i] <= 5000`
• All the values of `coins` are unique.
• `0 <= amount <= 5000`

Now, let’s see the code of 518. Coin Change 2 – Leetcode Solution.

# Coin Change 2 – Leetcode Solution

### 518. Coin Change 2 – Solution in Java

```class Solution {
public int solveTab(int amount, int[] coins){
int[] dp = new int[amount+1];
dp[0] = 1;

for(int e:coins){
for(int i=1;i<=amount;i++){
if(i-e >= 0)
dp[i] += dp[i-e];
}
}

return dp[amount];
}
public int change(int amount, int[] coins) {
return solveTab(amount,coins);
}
}```

### 518. Coin Change 2 – Solution in C++

```class Solution {
public:
int change(int amount, vector<int>& coins) {
vector<int> dp(amount+1, 0);
dp[0] = 1;
for(int x: coins){
for(int i=x; i<=amount; i++) dp[i] += dp[i-x];
}
return dp[amount];
}
};```

### 518. Coin Change 2– Solution in Python

```class Solution:
def change(self, amount: int, coins: List[int]) -> int:
DP = [1] + [0] * amount
for coin in coins:
for j in range(coin, amount + 1):
DP[j] += DP[j - coin]
return DP[-1]```

Note: This problem 518. Coin Change 2 is generated by Leetcode but the solution is provided by CodingBroz. This tutorial is only for Educational and Learning purpose.