热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

leetcode【39,40,77,78,90,216】排列组合问题

组合问题:题目中涉及到allpossiblesulutions时就要用到搜索算法,用深度优先搜索来解决。leetcode78.Subsets题目描

组合问题:

题目中涉及到all  possible sulutions时就要用到搜索算法,用深度优先搜索来解决。


leetcode 78.Subsets


题目描述

Given a set of distinct integers, nums, return all possible subsets (the power set).

Note: The solution set must not contain duplicate subsets.

Example:

Input: nums = [1,2,3]
Output:
[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]
]

思路:

用递归的思想,从空集合开始,找到以nums中每个元素开始的所有可能的组合数。


实现:

public List> subsets(int[] nums) {//recursion:程序的一种实现方式&#xff0c;函数自己调用自己List> ret&#61;new ArrayList<>();if(nums&#61;&#61;null){return ret;}ArrayList sub&#61;new ArrayList<>();//将所有以空集开头的集合加入到ret中helper(ret,sub,nums,0);return ret;
}
//递归的三要素之一&#xff1a;定义
//将以subset开头的所有的子集全部找到&#xff0c;并加入到ret中
private void helper(List> ret,ArrayList sub,int[] nums,int fromIndex){//递归的三要素之二&#xff1a;极限小的状态//if(XXX){ return }//每当进入到一次新的递归&#xff0c;相等于从一个点进入到新的点&#xff0c;都需要将sub的结果加入到ret//referenceret.add(new ArrayList<>(sub));//递归三要素之三&#xff1a;如何变为更小的状态for(int i&#61;fromIndex;i}

 


leetcode 90. Subsets II


题目描述&#xff1a;

Given a collection of integers that might contain duplicates, nums, return all possible subsets (the power set).

Note: The solution set must not contain duplicate subsets.

Example:

Input: [1,2,2]
Output:
[[2],[1],[1,2,2],[2,2],[1,2],[]
]

思路&#xff1a;

和上面求集合的方法是一样的&#xff0c;只不过因为数组中包含重复的元素&#xff0c;所以在求组合数时&#xff0c;需要对重复的元素进行过滤。所以我们在逐个寻找以nums中某个元素开始的所有集合时&#xff0c;都判断一下当前元素是否和上一个元素一样&#xff0c;如果一样&#xff0c;就跳过。


实现&#xff1a;

public List> subsetsWithDup(int[] nums) {List> ret&#61;new ArrayList<>();if(nums&#61;&#61;null||nums.length&#61;&#61;0) return ret;Arrays.sort(nums);ArrayList sub&#61;new ArrayList<>();fun(nums,ret,sub,0);return ret;
}
private void fun(int[] nums,List> ret,ArrayList sub,int fromIndex){ret.add(new ArrayList<>(sub));for(int i&#61;fromIndex;i}

 


leetcode 77. Combinations


题目描述&#xff1a;

Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.

Example:

Input: n &#61; 4, k &#61; 2
Output:
[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],
]

思路&#xff1a;

要求给出all possible combnations,所以我们也需要使用搜索算法来实现。可选的元素是1-n,每次选择一个元素后&#xff0c;都需要使用搜索算法&#xff08;递归&#xff09;将它与后面的元素做组合&#xff0c;集合中元素个数为k时停止搜索&#xff08;递归截止的条件&#xff09;。

因为我们的集合中必须存在k个元素&#xff0c;所以在从第一个元素开始逐个加入集合时&#xff0c;我们最多只能加到第n-k&#43;1个元素&#xff0c;这样才保证集合中存在K个元素&#xff0c;比如加入[1,2,3,4,5,6,7,8,9,10],k&#61;5,那我们集合开头的元素最多是6开头&#xff0c;这样保证集合至少有5个元素&#xff0c;[6,7,8,9,10]&#xff0c;若我们选择7&#xff0c;则此时剩下的元素就不够5个了。


实现&#xff1a;

public List> combine(int n, int k) {List> ret&#61;new ArrayList<>();ArrayList sub&#61;new ArrayList<>();if(k>n||k<0||n<0){return ret;}fun(n,k,1,ret,sub);return ret;
}
private void fun(int n,int k,int indexFrom,List> ret, ArrayList sub){if(k&#61;&#61;0){ret.add(new ArrayList<>(sub));//basecase,子集满了return;}for(int i&#61;indexFrom;i<&#61;n-k&#43;1;i&#43;&#43;){sub.add(i);//选择一个数fun(n,k-1,i&#43;1,ret,sub);//递归搜索sub.remove(sub.size()-1);//不选择这个数}
}

其他题目&#xff1a;

https://blog.csdn.net/orangefly0214/article/details/89959891


推荐阅读
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 判断编码是否可立即解码的程序及电话号码一致性判断程序
    本文介绍了两个编程题目,一个是判断编码是否可立即解码的程序,另一个是判断电话号码一致性的程序。对于第一个题目,给出一组二进制编码,判断是否存在一个编码是另一个编码的前缀,如果不存在则称为可立即解码的编码。对于第二个题目,给出一些电话号码,判断是否存在一个号码是另一个号码的前缀,如果不存在则说明这些号码是一致的。两个题目的解法类似,都使用了树的数据结构来实现。 ... [详细]
  • 基于halcon的特征匹配实例
    特征匹配原图模板识别图代码结果原图模板识别图代码*这个例子在图片数据库中查找文章的页面。*第一步是训练不同的页面并创建模型。*然后搜索未知图像并检测出正确的文章页面。*请注意& ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
  • 将数组划分为两个子集,在它们的最大值和最小值之间进行最小位异或原 ... [详细]
  • 深入解析Python文本数据处理的技巧与方法
    学习Python时,它总能让人深刻体会到这款语言的魅力。今天小编为大家带来一个有趣的项目,用Python处理文本数据,一起来看看今天的问题吧 ... [详细]
  • Python之基础篇(三)
    基础篇之三:一,数据类型之set.总结:set无序,不重复。1,创建set:s{1,2,3}print(s,type(s))list1[1,2,3]s1(list1)prin ... [详细]
author-avatar
彭木对_690
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有