[M背包] lc518. 零钱兑换 II(完全背包+背包求方案数)

Posted Ypuyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[M背包] lc518. 零钱兑换 II(完全背包+背包求方案数)相关的知识,希望对你有一定的参考价值。

1. 题目来源

链接:518. 零钱兑换 II

相关:

2. 题目解析

完全背包裸题。

不论是采用完全背包的方法直接做,还是像官方题解那样当成一个普通的 dp 题进行状态定义、状态转移等。但是本题它就是一个裸的完全背包求方案数的裸题。

对比:

  • 朴素的完全背包是装满背包求最大价值。
  • 而在 [M背包] lc322. 零钱兑换(dp基础+知识理解+完全背包) 中是求装满背包的最少物品数量。
  • 在本题中是求装满背包的方案数。
  • 这三者就涵盖了 dp 问题的三大板块、最大价值、最小价值、方案数。
  • 虽然状态定义、转移、初始化等需要改变。但是其思想不变,所用到的算法模板不变,得抓住本质!

时间复杂度: O ( n 2 ) O(n^2) O(n2)

空间复杂度: O ( n ) O(n) O(n)


class Solution {
public:
    int change(int amount, vector<int>& coins) {
        int n = coins.size();
        vector<int> f(amount + 1);

        f[0] = 1;
        for (int i = 0; i < n; i ++ ) 
            for (int j = coins[i]; j <= amount; j ++ ) 
                f[j] += f[j - coins[i]];
        
        return f[amount];
    }
};

以上是关于[M背包] lc518. 零钱兑换 II(完全背包+背包求方案数)的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 518. 零钱兑换 II-----完全背包套路模板

518-零钱兑换 II(完全背包-求方案总数)

518. 零钱兑换 II(完全背包一维二维的理解)

算法---- 01背包问题和完全背包问题LeetCode系列问题题解

算法---- 01背包问题和完全背包问题LeetCode系列问题题解

算法---- 01背包问题和完全背包问题LeetCode系列问题题解