题目
给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。
示例 1:
输入: amount = 5, coins = [1, 2, 5]
输出: 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。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/coin-change-2
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
代码
class Solution {
public int change(int amount, int[] coins) {
//1.定义数组
int[] dp = new int[amount+1];
//2.初始化数组状态
dp[0] = 1;
for(int coin:coins){
for(int i=0;i<=amount;i++){
//3.边界条件
if(i>=coin){
//4.状态转移方程
dp[i] = dp[i]+dp[i-coin];
}
}
}
return dp[amount];
}
}
题目
硬币。给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007)
示例1:
输入: n = 5
输出:2
解释: 有两种方式可以凑成总金额:
5=5
5=1+1+1+1+1
示例2:
输入: n = 10
输出:4
解释: 有四种方式可以凑成总金额:
10=10
10=5+5
10=5+1+1+1+1+1
10=1+1+1+1+1+1+1+1+1+1
说明:
注意:
你可以假设:
0 <= n (总金额) <= 1000000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/coin-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
代码
class Solution {
public int waysToChange(int amount) {
int[] dp = new int[amount+1];
int[] coins = new int[]{1,5,10,25};
dp[0] =1;
for(int coin:coins){
for(int i=1;i<=amount;i++){
if(i>=coin){
dp[i] = (dp[i]+dp[i-coin])%1000000007;
}
}
}
return dp[amount];
}
}