DynamicProgramming
Coin Change Ways
public class CoinChangeWays {
public static int countWays(int[] coins, int amount) {
int[] dp = new int[amount + 1];
dp[0] = 1;
for (int coin : coins) {
for (int i = coin; i <= amount; i++) {
dp[i] += dp[i - coin];
}
}
return dp[amount];
}
}- Dry run (coins={1,2,5}, amount=5):
- start: [1,0,0,0,0,0]
- coin=1 → [1,1,1,1,1,1]
- coin=2 → [1,1,2,2,3,3]
- coin=5 → [1,1,2,2,3,4] → ways=4