[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-----完全背包套路模板
算法---- 01背包问题和完全背包问题LeetCode系列问题题解