Combination Sum 无序数组中找组合(每个元素可用多次)使得和为target@LeetCode

面试题-排序数组中找两数之和为target的所有数的组合-leetcode167的变型题 题目描述: 给定排序数组arr,目标值target,寻找数组中所有和为target的数的组合,返回对应的索引。 题目没有说等于target的数对是否唯一,如果唯一,就是leetcode 167https://blog.youkuaiyun.com/orangefly0214/article/details/89155613 然而我也没有主动和面试官沟通题目,是否唯一,是否有重复的数,自己随手写了个数组{... 阅读详情

典型DFS回溯,参考这篇 《递归,回溯,DFS,BFS的理解和模板》,另外这篇 http://blog.youkuaiyun.com/u011095253/article/details/9158423  就

1. 什么时候返回

2. 递归的时候传入什么样的参数(每个参数的物理意义是什么!)

也有着很精彩的分析!


package Level3;

import java.util.ArrayList;
import java.util.Arrays;


/**
 * 
 * Combination Sum
 * 
 * Given a set of candidate numbers (C) and a target number (T), find all unique
 * combinations in C where the candidate numbers sums to T.
 * 
 * The same repeated number may be chosen from C unlimited number of times.
 * 
 * Note: All numbers (including target) will be positive integers. Elements in a
 * combination (a1, a2, … , ak) must be in non-descending order. (ie, a1 ≤ a2 ≤
 * … ≤ ak). The solution set must not contain duplicate combinations. For
 * example, given candidate set 2,3,6,7 and target 7, A solution set is: [7] [2,
 * 2, 3]
 * 
 */
public class S39 {

	public static void main(String[] args) {
		int[] candidates = {8,7,4,3};
		int target = 11;
		
		System.out.println(combinationSum(candidates, target));
	}

	public static ArrayList<ArrayList<Integer>> combinationSum(int[] candidates, int target) {
		ArrayList<ArrayList<Integer>> ret = new ArrayList<ArrayList<Integer>>();
		ArrayList<Integer> al = new ArrayList<Integer>();
		Arrays.sort(candidates);		// 必须先排序
		dfs(candidates, target, 0, ret, al);
		return ret;
	}
	
	public static void dfs(int[] candidates, int remain, int start, ArrayList<ArrayList<Integer>> ret, ArrayList<Integer> al){
		if(remain == 0){		// 找到一个合法解
			ret.add(new ArrayList<Integer>(al));
			return;
		}
		
		for(int i=start; i<candidates.length; i++){	// 扩展状态
			int rest = remain - candidates[i];
			if(rest < 0){	// 剪枝
				return;
			}
			al.add(candidates[i]);		// 执行扩展动作
			dfs(candidates, rest, i, ret, al);
			al.remove(al.size()-1);		// 撤销动作
		}
	}
	
}


Again:

public class Solution {
    public ArrayList<ArrayList<Integer>> combinationSum(int[] candidates, int target) {
        ArrayList<ArrayList<Integer>> ret = new ArrayList<ArrayList<Integer>>();
        ArrayList<Integer> al = new ArrayList<Integer>();
        Arrays.sort(candidates);
        dfs(candidates, target, 0, al, ret);
        return ret;
    }
    
    public void dfs(int[] cands, int target, int pos, ArrayList<Integer> al, ArrayList<ArrayList<Integer>> ret){
        if(target < 0){
            return;
        }
        if(target == 0){
            ret.add(new ArrayList<Integer>(al));
            return;
        }
        
        for(int i=pos; i<cands.length; i++){
            al.add(cands[i]);
            dfs(cands, target-cands[i], i, al, ret);
            al.remove(al.size()-1);
        }
    }
}


Java查找不重复无序数组中是否存在两个数字的和为某个值 今天小编就为大家分享一篇关于Java查找不重复无序数组中是否存在两个数字的和为某个值,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 立即下载

相关推荐

写一个b站爬虫(思路)

part 0 安装 scrapy, requests part 1 信息获取 打开番剧索引链接(https://www.bilibili.com/anime/index/) F12控制台,选中NETWORK,来到xhr文件,我们可以找到了存放番剧json的地方

kou的博客 484

Combination Sum II 无序数组中找组合(每个元素只能用一次)使得和为target@LeetCode@LeetCode

和上一题思想一样,区别在于每个元素只能用一次,所以start的位置也要改变。 另外一个问题是如何处理返回大集合中有重复子集合的问题。最容易想到的就是用HashSet来过滤一遍,参考了http://blog.youkuaiyun.com/u011095253/article/details/9158423 的大作后发现有一种更绿色的方法,就是多用一个while循环跳过相同的元素!这个技巧在很多情况下都很好用

2555

three.js 载入 3D 模型的方法

三维模型的加载器ColladaLoader模型加载器。GLTFLoader模型加载器。OBJLoader模型加载器。FBXLoader模型加载器。

w418856的博客 4362

给定一个无序数组和一个目标值,找出数组中两个数之和等于目标值的所有组合

题目: 给定一个无序数组和一个目标值,找出数组中两个数之和等于目标值的所有组合,并给出时间复杂度。 假设数组是[3,5,3,5],目标值是8。 答案是否可重复,题里没说,所以分3种情况,如下: 1.重复。答案是【0,1】【0,3】【1,2】【2,3】,序号组合,共4种组合。 解法如下: 1.1.嵌套遍历。时间复杂度:O(n^2)。 1.2.哈希法。键存数组元素值,值存出现次数。时间复杂度:O(n)。 1.3.排序+双指针夹逼。时间复杂度:O(nlogn)。 2.半重复。答案是【0,1】【2,3】,也可能是【

lewele001的博客 2015

【多元统计分析】均值向量和协方差阵的检验——spss上机实验

均值向量和协方差阵的检验——spss上机实验 #参考书目为《多元统计分析》(第五版)——何晓群.中国人民大学出版社 #如有错误,请指正!谢谢~ #关注公众号搜索同名文章获取数据~ 习题2.3 现选取内蒙古、广西、贵州、云南、西藏、宁夏、新疆、甘肃和青海等9个内陆边远省区。选取人均GDP、第三产业比重、人均消费支出、人口自然增长率及文盲半文盲人口占15岁以上人口的比例等5项能较好的说明各地区社会经济发展水平的指标,验证边远及少数民族聚居区的社会经济发展水平与全国平均水平间有无显著差异。 将输入导入spss

suansuannainaizi的博客 3万+

M2DGR数据集在一些SLAM框架上的配置与运行:ORB-SLAM系列、VINS-Mono、LOAM系列、FAST-LIO系列、hdl_graph_slam

为了说明以上这些SLAM框架的测试与数据集适配,以M2DGR数据集为例进行各自的配置与运行,方便我以后适配自己的数据集,运行的SLAM框架包括:ORB-SLAM2、ORB-SLAM3、VINS-Mono、A-LOAM、LeGO-LOAM、LIO-SAM、LVI-SAM、FAST-LIO2、FAST-LIVO、Faster-LIO、hdl_graph_slam。实验基于Ubuntu20.04,其中ORB、VINS-Mono、和LOAM系列的安装参考我以前的博客,有详细的安装方法,其他的框架在后面会简单介绍一下

zardforever123的博客 1万+

一个无序数组中两个数之和等于给定的值sum

【问题描述】 给定一个数组,求两个数之和=给定值sum的所有组合个数。 【变形】两个数之和=sum的任意一组数 【方法一】穷举法 从数组中任意找两个数,看其和是否=sum。时间复杂度O(N^2) 【方法二】先排序,然后定义两个指针,一个i=0指向数组头,一个j=len-1指向数组的尾,看其和是否==sum;若==,则查找成功返回;若>sum,则尾指针j--;若 时间复杂

suibianshen2012的专栏 1万+

深入了解AES_GCM算法

常见的对称加密算法,在解密过程中无法确认密钥是否正确的。这就意味着,密文可以用任何密钥执行解密运算,得到一组疑似密文;由于不知道密钥是否正确,故也不能确定解密出来的明文数据是否正确。因此,需要在对称加密算法上增加一层验证机制,常见思路为使用加密算法进行加密保证机密性,使用摘要算法计算MAC保证完整性和真实性,这就涉及到摘要计算和加密计算的前后顺序和参与计算的数据、密钥等,使用起来略微麻烦。

huaqianzkh的专栏 4186

LeetCode 39. 组合总和(Combination Sum)

题目描述: 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明: 所有数字(包括 target)都是正整数。 解集不能包含重复的组合。  示例 1: 输入: candidates = [2,3,6,7], target = 7...

tan137310853的博客 167

macOS Jdk1.8安装(目前主流版本的jdk)

添加环境环境变量,类似于windows的高级设置中path配置的环境变量。查看 JAVA_HOME 目录。查看 JDK 版本信息。一直下一步安装就好了。在终端的根目录下运行。

m0_50207524的博客 9352

3. LangGraph快速入门

本示例中,我们将使用 Claude Sonnet 4.5 模型,并定义加法、乘法、除法工具。# 定义工具@toolArgs:"""@toolArgs:"""@toolArgs:"""# 为大模型绑定工具图的状态用于存储消息和大模型调用次数。LangGraph 中的状态在整个智能体执行过程中保持持久化。使用带的Annotated类型可以确保新消息追加到现有列表,而不是替换列表。模型节点用于调用大模型,并决定是否调用工具。return {],

Long_像风一样自由 842

四数之和

给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。 注意: 答案中不可以包含重复的四元组。 示例: 给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。 满足要求的四元组集合为: [ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2] ] 来源:力扣(Le

weixin_44469024的博客 284

Open3D(C++) 点云构建三维Delaunay三角剖分

C++版本的Open3D实现从点云构建三维Delaunay,可视化效果。

点云侠的博客 2247

Leetcode39--->Combination Sum(在数组中找出和为target的组合)

题目: 给定一个数组candidates和一个目标值target,求出数组中相加结果为target的数字组合; 举例: For example, given candidate set[2, 3, 6, 7]and target7,A solution set is: [[7],[2, 2, 3]] 从举例中可以看出,同一个数字可以使用多次,且结果是唯一的; 解题思路: 我个...

weixin_30907523的博客 317

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

(Java实现)给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 方法一:我使用递归的方法来做的,但是这个方法比较麻烦。 方法二的思路是:遍历数组,用目标数减去数组里面的每一个数,然后判断得到的结果是否也在数组中,如果存在,就返回对应的下标。源代码在网上有,我就不写...

weixin_41879980的博客 2670

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java中如何比较两个数组的内容相等?

文章目录错误比较:调用数组对象的equals方法对于字符数组,可先转换为String类,再调用equals比较通用的解决方案:使用数组工具类Arrays 错误比较:调用数组对象的equals方法 下述代码输出? public class ArrayTest { public static void main(String[] args) { char[] a = ne...

超级无敌小胖头 2417

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

LeetCode:四数相加(四个数组)、四数之和(一个数组)

public class Solution_454 { /** * 四数相加: * 给定四个包含整数的数组列表A , B , C , D ,计算有多少个元组 (i, j, k, l),使得A[i] + B[j] + C[k] + D[l] = 0。 * 为了使问题简单化,所有的 A, B, C, D 具有相同的长度N,且 0 ≤ N ≤ 500 。所...

FromNowOnUntilTheEnd 1537

leet-code 找出数组中所有可以使数字和为target的组合

题目: 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 语言: python 解题思路: 遍历 数组,用target 减每一个数组中的每个元素, 判断差是否在该数组中, 用元组去存i和差,并判断(差,i) 是否已经在结果集中,如果在的话,那么就不添加到结果数组中,如果不存在才将(i,差)添加到结果集中。 candidates = [1, 2, 4, 3,...

Dream_it_possible!的博客 2358

四数之和为target

【题目描述】 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。 注意:答案中不可以包含重复的四元组。 【示例】 给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。 满足要求的四元组集合为: [ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2]

fujch3的博客 306

LeetCode刷题总结(C语言版)

编程总结 每每刷完一道题后,其思想和精妙之处没有地方记录,本篇博客用以记录刷题过程中的遇到的算法和技巧 001)两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的两个整数。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] ...

凡物加倍磨治,皆能变化气质 6399

组合总和 I(力扣第39题)

题目: 给定一个无重复元素的数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。 candidates中的数字可以无限制重复被选取。 说明: 所有数字(包括target)都是正整数。 解集不能包含重复的组合。 示例: 输入: candidates = [2,3,6,7], target = 7, 所求解集为: [ [7], [2,2,3] ] 分析:   给定的数组中的元素是不重复的,但是数组中的元...

weixin_42438279的博客 349

数组-leetcode#18-四个数求和等于target的所有组合

class Solution { public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<int>> res; if(nums.size()<=1) return res; sort(nums.begin(),nums.end()); for(int i.

u011089927的专栏 475

Leetcode——给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。(java语言)

题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例:给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 这题与之前有说过类似的题,附上链接如下。 剑指offer——输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是

mkfka的博客 3895

leetcode 18. 四数之和

给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。 注意: 答案中不可以包含重复的四元组。 示例: 给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。 满足要求的四元组集合为...

zhuanli555的专栏 422

算法-给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标(js实现)。

从今天开始学习算法每日一题,总结该算法的各种实现方法,本人前端小白,只总结js的代码实现,并附上思路便于复习。题目的答案都从力扣网里的大神那找到,自己暂时还想不出来怎么写,希望以后会有所进步。 *给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标(js实现)。 1.方法1 利用哈希表将每一个整数与target目标数的差值和该证书的索引值,以键值对(差值,索引值)的方式存入哈希表,循环判断每一个整数在哈希表中是否存在与该整数相等的差值,若

weixin_43936284的博客 3693

LeetCode 18 4sum 找出4个数,使得他们的和等于target

题目: Given an arraySofnintegers, are there elementsa,b,c, anddinSsuch thata+b+c+d= target? Find all unique quadruplets in the array which gives the sum of target. Note: Elements in a quadrupl...

大三狗现在才努力还不算晚吧?! 294
上一篇: Binary Tree Inorder Traversal 二叉树中序遍历@LeetCode
下一篇: Combination Sum II 无序数组中找组合(每个元素只能用一次)使得和为target@LeetCode@LeetCode
chiiis
博客等级 码龄14年 422粉丝 429原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值