组合总和 Ⅳ

给你一个由 不同 整数组成的数组 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. dp数组的定义及下标的含义

dp[i][j] : 表示前i个数组成背包j的组合数为dp[i][j]

  1. 状态转移方程

j<nums[i] , dp[i][j] = dp[i-1][j]

j≥nums[i], dp[i][j] = dp[i][j-nums[i]]+ dp[i][j-nums[i-1]]+…+ dp[i][j-nums[0]]

关于理解 j≥nums[i]时dp[i][j]的状态方程

因为这个是不分顺序并且是无穷背包 所以 前面的每个物品都有可能被装入背包

然后累加起来就是不分顺序的组合数

3. 初始化

初始第一行和第一列

第一列为1,因为背包为0时的组合数只有一个不取数即可。

package 力扣;/*** @author yyq* @create 2022-06-21 18:18*/
public class leetcode377 {public static void main(String[] args) {leetcode377 leetcode377=new leetcode377();leetcode377.combinationSum4(new int[]{1,2,3},4);}public int combinationSum4(int[] nums, int target) {// 创建dp数组int[][] dp=new int[nums.length][target+1];// 初始化dp数组for (int i=0;i<nums.length;i++){dp[i][0] = 1;}for (int j=1;j<target+1;j++){if(j>=nums[0]){if(j%nums[0]==0){dp[0][j] = 1;}else dp[0][j] = 0;}else dp[0][j] = 0;}// 填补dp数组// 外层循环物品 内层背包for (int i=1;i<nums.length;i++){for (int j=1;j<target+1;j++){if(j>=nums[i]){for (int x=0;x<=i;x++){dp[i][j] =dp[i][j] +  dp[i][j-nums[x]];}}else dp[i][j] = dp[i-1][j];}}tools.printDP(dp,nums.length,target+1);return dp[nums.length-1][target];}
}

377.组合总和 Ⅳ相关推荐

  1. 377. 组合总和 Ⅳ golang 动态规划

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

  2. 代码随想录44——动态规划:完全背包理论基础、518零钱兑换II、377组合总和IV

    文章目录 1.完全背包理论基础 2.518零钱兑换II 2.1.题目 2.2.解答 3.377组合总和IV 3.1.题目 3.2.解答 4.组合和排列问题的便利顺序 4.1.组合问题 4.2.排列问题 ...

  3. 力扣:377. 组合总和 Ⅳ

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

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

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

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

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

  6. LeetCode 每日一题 377. 组合总和 Ⅳ

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

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

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

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

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

  9. 【力扣-动态规划入门】【第 21 天】377. 组合总和 Ⅳ

    标题:377. 组合总和 Ⅳ 难度:中等 天数:第21天,第1/3题 给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target .请你从 nums 中找出并返回总和为 target ...

  10. 377. 组合总和 Ⅳ(JavaScript,动规)

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

最新文章

  1. 一个跨国银行的敏捷转型案例要点之Agile Center
  2. Linux I/O 那些事儿
  3. Angulary应用依赖里的zone.js
  4. 各种平台下Perl模块的安装方法
  5. cnn图像进行预测_CNN方法:使用聚合物图像预测其玻璃化转变温度
  6. 正确认识 Vista 激活期限
  7. Soul 网关源码阅读(一) 概览
  8. 如何将wiki个人空间共享给其他人_青年居室的共享空间设计
  9. 2015年度总结-面对真实的自己
  10. ucgui 字体生成与字体个性化编辑
  11. 电脑输入法变成繁体中文如何改回来
  12. erlang ets写入mysql_Erlang 进程字典 VS ETS
  13. 五天带你学完《计算机网络》,期末考试不挂科
  14. 江北机场停车费多少钱一天,重庆江北机场附近停车场哪里最便宜
  15. 快速将PDF转换为图片:免费的在线PDF转换器
  16. UE4 4.26 Pixel Streaming 应用场景
  17. 深渊水妖 (模拟 看清题意
  18. Deep C (and C++) by Olve Maudal and Jon Jagger— 很不错的国外技术文章
  19. 政权更迭最频繁的魏晋南北朝
  20. USB服务器赋能美团数字化建设

热门文章

  1. apple iMac一体机 装双系统 实战! (Apple +Win 7 64bit)Good
  2. [QMT]04-在QMT之外调用xtquant直接编写策略
  3. 两台W7系统的电脑,A电脑可以ping通B电脑,B电脑ping不通A电脑。
  4. 系统学习----Linux网络管理
  5. 2021阳城一中高考成绩查询,阳城一中高考北大清华录取名单曝光,原来是这些人!...
  6. 【黑马Java笔记+踩坑】MyBatisPlus基础
  7. 2018 Google I/O 干货摘要以及对Android开发者的影响
  8. ABP 多租户 对应多数据库 租户启动报错
  9. 华为方法:如何发展教练|内线?
  10. 如何查看Linux磁盘类型