跳到主要内容

518.零钱兑换II

链接:518.零钱兑换II
难度:Medium
标签:数组、动态规划
简介:给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。

题解 1 - typescript

  • 编辑时间:2021-06-10
  • 执行用时:92ms
  • 内存消耗:39.8MB
  • 编程语言:typescript
  • 解法介绍:计算每种硬币的可能。
function change(amount: number, coins: number[]): number {
const dp = new Array(amount + 1).fill(0);
dp[0] = 1;
for (const coin of coins) {
for (let i = 1; i <= amount; i++) {
if (i >= coin) {
dp[i] += dp[i - coin];
}
}
}
return dp[amount];
}

题解 2 - javascript

  • 编辑时间:2021-09-13
  • 执行用时:100ms
  • 内存消耗:39.9MB
  • 编程语言:javascript
  • 解法介绍:动态规划。
function change(amount: number, coins: number[]): number {
coins.sort((a, b) => a - b);
const dp = new Array(amount + 1).fill(0);
dp[0] = 1;
for (const coin of coins) {
for (let i = 1; i <= amount; i++) {
if (i >= coin) dp[i] += dp[i - coin];
}
}
return dp[amount];
}

题解 3 - python

  • 编辑时间:2024-03-25
  • 执行用时:81ms
  • 内存消耗:16.5MB
  • 编程语言:python
  • 解法介绍:dp记录当前金额下的能兑换的方式数。
class Solution:
def change(self, amount: int, coins: List[int]) -> int:
dp = [0] * (amount + 1)
dp[0] = 1
for coin in coins:
for cur in range(coin, amount + 1):
dp[cur] += dp[cur - coin]
return dp[amount]