def change(amount,coins):
dp=[0]*(amount+1); dp[0]=1
for coin in coins:
for i in range(coin,amount+1):
dp[i]+=dp[i-coin]
return dp[amount]
public int change(int amount,int[] coins){
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];
}
Combination count DP. Outer loop over coins prevents duplicates. Nearly identical.
def change(amount,coins):
dp=[0]*(amount+1); dp[0]=1
for coin in coins:
for i in range(coin,amount+1):
dp[i]+=dp[i-coin]
return dp[amount]
public int change(int amount,int[] coins){
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];
}
1. dp[0]=1 base case 2. For each coin update