#6963. 零钱兑换 II(Coin Change II)

零钱兑换 II(Coin Change II)

零钱兑换 II(Coin Change II)

**难度:**中等

题目描述

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

请返回凑出该金额的组合数。如果无法凑出该金额,返回 0。

每种面额的硬币都有无限枚。硬币的选取顺序不同,但所选硬币数量相同,视为同一种组合。

题目保证最终答案可以用有符号 32 位整数表示。

样例 1

输入:amount = 5, coins = [1,2,5]
输出:4

**说明:**共有 4 种组合:

  • (5=5)
  • (5=2+2+1)
  • (5=2+1+1+1)
  • (5=1+1+1+1+1)

样例 2

输入:amount = 3, coins = [2]
输出:0

**说明:**只使用面额为 2 的硬币,无法凑出金额 3。

样例 3

输入:amount = 10, coins = [10]
输出:1

数据范围

  • (1 \le \text{coins.length} \le 300)
  • (1 \le \text{coins}[i] \le 5000)
  • coins 中的面额各不相同。
  • (0 \le \text{amount} \le 5000)
测试点编号 层级 n amount 特殊性质 标准输出 设计目的
1 弱数据 1 0 目标金额为 0 1 检查空组合及 dp[0]=1
2 边界数据 7 无法凑出目标金额 0 检查无可行组合的情况
3 弱数据 3 5 经典面额 1,2,5 4 检查组合计数,并避免把不同顺序重复计算
4 特殊数据 4 存在两个面额为 2 的输入项 6 检查当前程序对重复面额的实际计数行为
5 极限数据 100 100000 面额为 1000,2000,…,100000 190569292 覆盖大金额、多面额,并让答案接近 int 上限