Leetcode 377.组合总和IV
组合总和IV
给定一个由正整数组成且不存在重复数字的数组,找出和为给定目标正整数的组合的个数。
示例:
nums = [1, 2, 3]
target = 4
所有可能的组合为:
(1, 1, 1, 1)
(1, 1, 2)
(1, 2, 1)
(1, 3)
(2, 1, 1)
(2, 2)
(3, 1)
请注意,顺序不同的序列被视作不同的组合。
因此输出为 7。
进阶:
如果给定的数组中含有负数会怎么样?
问题会产生什么变化?
我们需要在题目中添加什么限制来允许负数的出现?
解题思路:
使用递归的方法做这个题会超时,
因此根据这道题的解法提示选择使用DP的方法,这时我们需要一个一维数组dp大小为target+1,从对应dp[i]存储的是目标i时所得的组合数,然后我们从dp[1]开始计算直到dp[target],每次计算dp[i]时的方法是,从头开始遍历nums数组,如果i>=nums[j], dp[i] = dp[i] + dp[i-nums[j]],
(比如题目中的例子[1,2,3]
计算dp[1] :
从头开始遍历nums
当j =0时 因为1 >= nums[0] 故 dp[1] = dp[1]+dp[1- nums[0]],即
dp[1] = dp[1]+dp[0] = 1;
当j=1 时 因为1 < nums[1] 故 不再运算 故dp[1] = 1;
计算 dp[2]:
当j =0时 因为2 >= nums[0] 故 dp[2] = dp[2]+dp[2- nums[0]],即
dp[2] = dp[2]+dp[1] = 1;
当j =1时 因为2 >= nums[1] 故 dp[2] = dp[2]+dp[2- nums[1]],即
dp[2] = dp[2]+dp[0] = 2;
当j=2 时 因为2 < nums[2] 故 不再运算 故dp[2] = 2;
 import java.util.Arrays;
 public class Solution{
     public int combinationSum4(int[] nums,int target){
         int result=0;
         int[] dp=new int[target+1];
         dp[0]=1;
         Arrays.sort(nums);
         for(int i=1;i<target+1;i++){
             for(int num:nums){
                 if(i>=num){
                     dp[i]=dp[i]+dp[i-num];
                 }else{
                     break;
                 }
             }
         }
         result=dp[target];
         return result;
     }
 }
Leetcode 377.组合总和IV的更多相关文章
- Java实现 LeetCode 377 组合总和 Ⅳ
		377. 组合总和 Ⅳ 给定一个由正整数组成且不存在重复数字的数组,找出和为给定目标正整数的组合的个数. 示例: nums = [1, 2, 3] target = 4 所有可能的组合为: (1, 1 ... 
- Java实现 LeetCode 40 组合总和 II(二)
		40. 组合总和 II 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在 ... 
- Java实现 LeetCode 39 组合总和
		39. 组合总和 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的数字 ... 
- LeetCode 中级 - 组合总和II(105)
		给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只能使用一次. ... 
- [LeetCode]  39. 组合总和
		题目链接 : https://leetcode-cn.com/problems/combination-sum/ 题目描述: 给定一个无重复元素的数组 candidates 和一个目标数 target ... 
- Java实现 LeetCode 216. 组合总和 III(三)
		216. 组合总和 III 找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字. 说明: 所有数字都是正整数. 解集不能包含重复的组合. ... 
- [leetcode] 39. 组合总和(Java)(dfs、递归、回溯)
		39. 组合总和 直接暴力思路,用dfs+回溯枚举所有可能组合情况.难点在于每个数可取无数次. 我的枚举思路是: 外层枚举答案数组的长度,即枚举解中的数字个数,从1个开始,到target/ min(c ... 
- [LeetCode] 377. Combination Sum IV 组合之和之四
		Given an integer array with all positive numbers and no duplicates, find the number of possible comb ... 
- [LeetCode] 377. Combination Sum IV 组合之和 IV
		Given an integer array with all positive numbers and no duplicates, find the number of possible comb ... 
随机推荐
- Notepad++ 安装 Zen Coding / Emmet 插件
			Zen Coding 插件 ============== 下载: Zen.Coding-Notepad++.v0.7.zip ==Installation== 1. Copy contents of ... 
- RK3288开发过程中遇到的问题点和解决方法之Packages
			去除桌面渐变黑边 Launcher3/.../Launcher.java SETWorkspaceBackground => setWorkspaceBackground 注释boolean i ... 
- XPath基本使用
			一.简介 1.什么是XPath 1)XPath是W3C的一个标准 2)XPath 是一门在 XML 文档中查找信息的语言. 3)XPath 用于在 XML 文档中通过元素和属性进行导航. 4)XPa ... 
- ajax上传文件以及使用中常见问题处理
			<script src="/scripts/ajaxfileupload.js"></script> <script src="/scrip ... 
- mac ssd开启trim模式
			开启方法 sudo trimforce enable 
- eclipse中Lombok注解无效
			问题现象:eclipse中使用lombok的@Date,引用get方法时,报错. 解决方案: 在lombok官网(https://www.projectlombok.org/download)下载,或 ... 
- C#背景图片自适应
			1.选中窗体修改属性 2.在load添加代码 private void Form1_Load(object sender, EventArgs e) { this.BackgroundImageLay ... 
- JS原型、原型链、构造函数、实例与继承
			https://cloud.tencent.com/developer/article/1408283 https://cloud.tencent.com/developer/article/1195 ... 
- python_108_格式化字符串format函数
			#通过关键字映射 print('I am {name},age {age}'.format(name='qiqi齐',age=18))#I am qiqi齐,age 18 dictory={'name ... 
- 还有这种书,程序开发心理学(豆瓣) - 豆瓣读书,转载自:https://book.douban.com/subject/1141154/
			登录/注册 下载豆瓣客户端 豆瓣 读书 电影 音乐 同城 小组 阅读 FM 时间 豆品 更多 豆瓣读书 购书单 电子图书 豆瓣书店 2018年度榜单 2018书影音报告 购物车 程序开发心理学 作 ... 
