377. 组合总和 Ⅳ

给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。

题目数据保证答案符合 32 位整数范围。

示例 1:

输入:nums = [1,2,3], target = 4
输出:7
解释:
所有可能的组合为:
(1, 1, 1, 1)
(1, 1, 2)
(1, 2, 1)
(1, 3)
(2, 1, 1)
(2, 2)
(3, 1)
请注意,顺序不同的序列被视作不同的组合。

示例 2:

输入:nums = [9], target = 3
输出:0

提示:

  • 1 <= nums.length <= 200
  • 1 <= nums[i] <= 1000
  • nums 中的所有元素 互不相同
  • 1 <= target <= 1000

进阶:如果给定的数组中含有负数会发生什么?问题会产生何种变化?如果允许负数出现,需要向题目中添加哪些限制条件?

方法一:动态规划

思路

dp[i] 表示总和为 i 时的组合个数,因为数字都是正数,令 dp[0] = 1(总和为 0 有一种组合,都不选)。

  • dp[0] = 1
  • dp[1] = 数组中 1 的个数 * dp[0]
  • dp[2] = 数组中 2 的个数 * dp[0] + 数组中 1 的个数 * dp[1]
  • dp[3] = 数组中 3 的个数 * dp[0] + 数组中 2 的个数 * dp[1] + 数组中 1 的个数 * dp[2]
  • ……
  • 以此类推,直到求出 dp[target]

值得注意的是,上述执行流程是为了方便理解 dp[target] 的推导过程。对于任意 dp[i],没有必要求出 1i 的个数再去乘以对应的 dp[i - 1]dp[0],只需要遍历 nums 找出小于等于 i 的数(即 i >= num),累加 dp[i] += dp[i - num] 即可。

参考代码

public int combinationSum4(int[] nums, int target) {int[] dp = new int[target + 1];dp[0] = 1;for (int i = 1; i <= target; i++) {for (int num : nums) {if (i >= num) {dp[i] += dp[i - num];}}}return dp[target];
}

执行结果

  • 进阶问题:如果存在负数,会导致有无限多的结果,总是可以用 N 个 负数 + M 个正数构建出等于 0 的式子。

LeetCode 每日一题 377. 组合总和 Ⅳ相关推荐

  1. Leetcode每日一题——377.组合总和Ⅳ。完全背包推导。dp数组

    题目链接: 力扣 题目描述: 给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target .请你从 nums 中找出并返回总和为 target 的元素组合的个数. 题目数据保证答案符合 ...

  2. 【Leetcode】完全背包问题-377. 组合总和 Ⅳ

    [Leetcode]完全背包问题-377. 组合总和 Ⅳ 题目 给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target .请你从 nums 中找出并返回总和为 target 的元素 ...

  3. 模拟卷Leetcode【普通】377. 组合总和 Ⅳ

    377. 组合总和 Ⅳ 给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target .请你从 nums 中找出并返回总和为 target 的元素组合的个数. 题目数据保证答案符合 32 ...

  4. [Leetcode][第39题][JAVA][组合总和][回溯][dfs][剪枝]

    [问题描述][中等] [解答思路] 1. 回溯 import java.util.ArrayDeque; import java.util.ArrayList; import java.util.De ...

  5. Leetcode 每日一题 40 组合2

    题目描述 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只能 ...

  6. [Leetcode][第40题][JAVA][数组总和2][回溯][剪枝]

    [问题描述][中等] [解答思路] 1. 减法 import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Ar ...

  7. leetcode.377. 组合总和 Ⅳ---dp问题

    377. 组合总和 Ⅳ 给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target .请你从 nums 中找出并返回总和为 target 的元素组合的个数. 题目数据保证答案符合 32 ...

  8. Java实现 LeetCode 377 组合总和 Ⅳ

    377. 组合总和 Ⅳ 给定一个由正整数组成且不存在重复数字的数组,找出和为给定目标正整数的组合的个数. 示例: nums = [1, 2, 3] target = 4 所有可能的组合为: (1, 1 ...

  9. [Leetcode] 377. 组合总和 Ⅳ

    给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target .请你从 nums 中找出并返回总和为 target 的元素组合的个数. 题目数据保证答案符合 32 位整数范围. 示例 1 ...

最新文章

  1. 用 Navicat for Oracle 管理 Oracle10g/11g 数据库
  2. 安装 esl php 模块,ESL系统的Docker化部署
  3. 小流域水土保持遥感信息系统
  4. BestCoder25 1001.Harry and Magical Computer(hdu 5154) 解题报告
  5. 在线应用的 Serverless 实践
  6. linux shell 变量 管道,linux下shell,变量,管道,重定向等基础知识及技巧
  7. Chrome控制台用法
  8. javaTemplates-学习笔记四
  9. 小写数字转大写_微软太坏了,这个函数居然被隐藏了,用它搞定数值转中文大小写...
  10. 【CodeForces 1260D --- A Game with Traps】二分
  11. SQL语法——触发器
  12. 华为最美小姐姐,被外派墨西哥后...
  13. 理解.exe文件的结构原理即运行过程
  14. python英语词汇量测试_python英语单词测试小程序
  15. 如何快速提升 Flutter App 中的动画性能
  16. FairMOT训练测试自定义数据集
  17. 上楼梯问题+不死兔子
  18. llqrcode.js识别二维码,解析二维码信息
  19. java heap 参数_java heap space解决方法和JVM参数设置--- JVM参数设置和程序优化篇
  20. 九月的诗11首 - AI 创作诗文绘画

热门文章

  1. 动环监控系统的服务器部署在,动环监控系统【斯必得智慧机房】
  2. 为互联网原住民设计产品的思考
  3. 【学习小记】狄利克雷卷积+杜教筛
  4. 以后自己买了房子就用的上了
  5. ZXing vs ZBar: 开源条形码SDK性能PK
  6. 那匆匆2014年,明明想静静
  7. arm的linux怎么管理任务,【linux】arm mm内存管理
  8. 安卓Native逆向之MOO音乐解密( .bkcflac,bkcmp3文件解密)
  9. 带括号的简单四则计算器(思路)
  10. 海南大学计算机学院唐朝胜,海南大学2011年12月新增博、硕导名单