Skip to content
On this page

322. 零钱兑换

原题链接:LeetCode 322. 零钱兑换

题目描述

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

计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1

你可以认为每种硬币的数量是无限的。

示例 1:

[1, 2, 5]

示例 2:

[2]

示例 3:

**输入:**coins = [1], amount = 0 **输出:**0

提示:

- `1 <= coins.length <= 12`

1 <= coins[i] <= 231 - 1
0 <= amount <= 104

难度: Medium


题解代码

javascript
/**
 * @param {number[]} coins
 * @param {number} amount
 * @return {number}
 */

const coinChange = (coins, amount) => {
    if (amount === 0) {
        return 0
    }
    const dp = Array(amount + 1).fill(Number.MAX_VALUE)
    dp[0] = 0

    for (let i = 0; i < dp.length; i++) {
        for (let j = 0; j < coins.length; j++) {
            if (i - coins[j] >= 0) {
                // [2, 3, 5]
                // dp[11] = Math.min(dp[9], dp[8], dp[6]) + 1
                dp[i] = Math.min(dp[i], dp[i- coins[j]] + 1)
            }
        }
    }

    return dp[dp.length - 1] === Number.MAX_VALUE ? - 1 : dp[dp.length - 1]
}

技术文档集合