【LeetCode每日一题】518. 零钱兑换 II

2021-07-09 15:50:54 浏览数 (1)

【LeetCode每日一题】518. 零钱兑换 II

题目:

给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。

示例 1:

代码语言:javascript复制
输入: 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:

代码语言:javascript复制
输入: amount = 3, coins = [2]
输出: 0
解释: 只用面额2的硬币不能凑成总金额3。

示例 3:

代码语言:javascript复制
输入: amount = 10, coins = [10] 
输出: 1

题解:

典型的背包问题,跟爬楼梯那道题非常相像。

代码语言:javascript复制
class Solution {
public:
    int change(int amount, vector<int>& coins) {
        
        vector<int> dp(amount   1);
        dp[0] = 1;
        for (auto coin : coins) {
            for (int j = 1; j <= amount; j  ) {

                if (j >= coin) {
                    dp[j] = dp[j]   dp[j - coin];
                }
            }
        }
        return dp[amount];
    }
};

0 人点赞