题目

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

示例

输入: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)
请注意,顺序不同的序列被视作不同的组合。

解析

根据示例,虽说写的是求组合,但其实是要求排列,且求的是排列的个数;
如下要点要牢记:
求组合数:外层for循环遍历物品,内层for遍历背包。
求排列数:外层for遍历背包,内层for循环遍历物品

再来一遍动规五部曲:
1.确定dp数组以及下标的含义
dp[i]: 凑成目标正整数为i的排列个数为dp[i];即i是背包容量,dp[i]是个数
2.确定递推公式
目标和零钱兑换II中也是一样,求装满背包有几种方法,递推公式一般都是:
dp[i] += dp[i - nums[j]];背下来

func combinationSum4(nums []int, target int) int {// 首先题目写的是组合,但根据示例,其实是排列// 如果是排列,那么遍历背包的顺序就是先背包,再物品了dp := make([]int, target+1) // 背包容量为target+1dp[0] = 1 for i := 0; i <= target; i++ { // i是背包,可以等于for j := 0; j < len(nums); j++ { // j是物品if i - nums[j] >= 0 { // 这一行表示此次循环中这个背包还能装下dp[i] += dp[i-nums[j]] //注意谁是i,谁是j}}}return dp[target]
}

leetcode 377 组合总和IV相关推荐

  1. 代码随想录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.排列问题 ...

  2. 算法训练Day44 动态规划专题- 背包问题 | 完全背包基础知识;LeetCode518. 零钱兑换(装满背包有多少种方法,组合数);377.组合总和IV(装满背包有多少种方法,排列数)

    前言: 算法训练系列是做<代码随想录>一刷,个人的学习笔记和详细的解题思路,总共会有60篇博客来记录,计划用60天的时间刷完.  内容包括了面试常见的10类题目,分别是:数组,链表,哈希表 ...

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

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

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

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

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

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

  6. leetcode 377. 组合总和 Ⅳ(dp)

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

  7. 100. Leetcode 377. 组合总和 Ⅳ (动态规划-完全背包)

    根据题意可判断属于完全背包队列问题 步骤一.确定状态: 确定dp数组及下标含义 dp数组的大小是target+1, 那么这时候背包的容量才能取到target, dp[j]表示的是装满容量为[j]的背包 ...

  8. 377. 组合总和IV

    DP数组表示凑成target有多少种方法 dp[j]!+=dp[j-nums[i]] 和0-1背包相反,先遍历容量再遍历物品 这道题说所有情况都小于INT_MAX,我的第一反映是高个long long ...

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

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

最新文章

  1. SAP MM MB21创建预留单据报错- Error during conversion to alternative units of measure -
  2. vector的实现原理
  3. 动态规划之硬币表示问题
  4. python机器学习、数据分析常用第三方库(实时更新)
  5. git仓库的推送问题
  6. CoreText使用介绍
  7. 一句话解释什么是回归
  8. ajax获取后生成元素,获取动态的子元素生成的内容与jQuery AJAX
  9. FragmentSharedFabTransition
  10. 51单片机的红外计数器设计
  11. MIKE 21 教程 2.5 水动力模块教学:涡粘系数(Eddy viscosity),河床阻力与曼宁系数(Bed Resistance)
  12. Windows触发事件ID说明
  13. 【退役贴】再见了ACM,再会了算法竞赛
  14. 快过年了用Python抢红包
  15. 青龙羊毛——酷狗放羊娃(搬运)
  16. ddtv.space index.php,图解MongoDB原理(二)
  17. (转载)45岁以后,外企的人都到去哪里了呢?
  18. Dhtml,html,xhtml的区别
  19. 【WLAN】Android 13 WIFI 选网机制讲解
  20. 建筑物轮廓(含楼层或者高度)

热门文章

  1. PACKAGE SZC
  2. Mirai QQ群机器人零基础教程(1)
  3. 微信云控系统怎么样,虚拟机手机靠谱么?
  4. 《完美搞砸中台项目的10个方法!》
  5. 解决找不到 css/modules/layer/default/layer.css?v=3.1.1 的问题
  6. Image Processing——图像处理教程(二)之MATLAB基础
  7. Mybatis 一对一、一对多、多对多
  8. php支付接口,代付、感悟
  9. 浅析云卡通的美食城应用前景
  10. linux 修改文件时间戳命令,linux下touch命令修改文件时间戳