zoukankan      html  css  js  c++  java
  • LeetCode377. 组合总和 Ⅳ

    题目

    分析

    本题要结合LeetCode518.零钱兑换II这道题一起看,零钱兑换是组合个数总和,而本题排列个数总和,也就是说 (1, 2, 1) 和 (2, 1, 1)是不同的。遍历顺序:要先遍历背包容量再遍历物品。正好与组合问题遍历顺序相反,组合问题不允许重复,所以要先遍历物品再遍历背包容量。由于完全背包问题,在遍历背包容量时用正序遍历。

    注意:本题对C++有坑,会出现和大于int情形

    代码

     1 class Solution {
     2 public:
     3     int combinationSum4(vector<int>& nums, int target) {
     4         vector<int>dp(target+1,0);
     5         dp[0] = 1;
     6         //先遍历容量再遍历物品
     7         for(int j = 0;j <= target;j++){
     8             for(int i = 0;i < nums.size();i++){
     9                 if(j >= nums[i] && dp[j] < INT_MAX - dp[j - nums[i]]) 
    10                     dp[j] += dp[j-nums[i]];
    11             }
    12         }
    13         return dp[target];
    14     }
    15 };

    总结

    对于两个数超INT的情形的处理, dp[j] < INT_MAX - dp[j - nums[i]]——参考代码随想录Carl

  • 相关阅读:
    448-查找数组中消失的所有数字
    977 -排序数组的正方形
    爬虫小总结
    增量式爬虫
    分布式爬虫
    CrawlSpider:类,Spider的一个子类
    中间件
    中间件
    scrapy图片数据爬取之ImagesPipeline
    scrapy五大核心组件
  • 原文地址:https://www.cnblogs.com/fresh-coder/p/14408966.html
Copyright © 2011-2022 走看看