// 原因在于比如amount = 5, coins = [1,2,5]
// 这种算法会将[1,2,2] [2,1,2] [2, 2, 1] 算成不同的
if (amount === 0) return 1;
const dp = [1].concat(Array(amount).fill(0));
for (let i = 1; i < amount + 1; i++) {
for (let j = 0; j < coins.length; j++) {
dp[i] = dp[i] + dp[i - coins[j]];
return dp[dp.length - 1];
// 正确的写法应该是内外循环调换一下, 具体可以看下方代码区