零钱兑换 I II
322.零钱兑换 I
给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。
计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。
你可以认为每种硬币的数量是无限的。
1 | |
518.零钱兑换 II
给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。
请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。
假设每一种面额的硬币有无限个。
题目数据保证结果符合 32 位带符号整数。
思路:
dp[i][j]表示从前i种硬币中选,且总金额恰好为j的所有选法集合的方案数按照第
i种硬币可以选0个,1个,2个,3个,,,,k个划分集合dp[i][j],其中k*coins[i] <= j第
i种硬币选0个,dp[i][j]=dp[i-1][j]第
i种硬币选1个,dp[i][j]=dp[i-1][j-coins[i]]第
i种硬币选k个,dp[i][j]=dp[i-1][j-k*coins[i]]状态计算:
dp[i][j] = dp[i-1][j]+dp[i-1][j-coins[i]]+dp[i-1][j-2*coins[i]]...+dp[i-1][j-k*coins[i]]
1 | |