目录
518 零钱兑换 ||
377 组合总和 Ⅳ
518 零钱兑换 ||
如果求组合数就是外层for循环遍历物品,内层for遍历背包。
class Solution {
public:int change(int amount, vector<int>& coins) {vector<int> f(amount + 10);//拼凑成总金额为i的总情况数f[0] = 1;for(int i = 0;i < coins.size();i++){for(int j = coins[i];j <= amount;j++){f[j] += f[j - coins[i]];}}return f[amount];}
};
时间复杂度O(n^m)n为amount的大小,m为coins的长度
空间复杂度O(n)
377 组合总和 Ⅳ
如果求排列数就是外层for遍历背包,内层for循环遍历物品。
class Solution {
public:int combinationSum4(vector<int>& nums, int target) {vector<int>f(target + 1);f[0] = 1;for(int i = 0;i <= target;i++){for(int j = 0;j < nums.size();j++){if(i >= nums[j] && f[i] < INT_MAX - f[i - nums[j]])//否则会越界f[i] += f[i - nums[j]];}}return f[target];}
};
时间复杂度O(n^m)n为target的大小,m为nums的长度
空间复杂度O(n)