class Solution {
public int change(int amount, int[] coins) {
// 1.确认dp数组 dp[j] 转满容量为j的背包,能有dp[j]种方法
int[] dp = new int[amount+1];
// 2.递推关系 dp[j] = dp[j] + dp[j-coins[i]];
// 3.初始化
dp[0] = 1;
// 4.遍历顺序 先遍历物品再遍历背包 这样求得是组合,不要求顺序,只能出现物品1,2这样得顺序,不会出现物品2,1
for(int i=0; i<coins.length; i++){
for(int j=coins[i]; j<=amount; j++){
dp[j] = dp[j] + dp[j-coins[i]];
}
}
return dp[amount];
}
}
运行结果: