给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。

    请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。

    假设每一种面额的硬币有无限个。

    题目数据保证结果符合 32 位带符号整数。

    分析:硬币的数量为无限个而不是只有1个,这便是完全背包问题,同时,我们要求的是组合数,那么递推公式为dp[i]+=dp[i-weight[j]]
    注意,为防止混淆,背包问题最好都是先遍历物品再遍历背包,但同时也要明白为何要这么做。

    参考代码:
    public int change(int amount, int[] coins) {
    int[] dp = new int[amount+1];
    dp[0]=1;
    for(int i=0;i for(int j=coins[i];j<=amount;j++){
    dp[j]+=dp[j-coins[i]];
    }
    }
    return dp[amount];
    }