JAVA求集合中的组合
好几个月没弄代码了,今天弄个求组合的DEMO
思路是将集合的每个值对照一个索引,索引大小是集合的大小+2.索引默认为[000...000],当组合后选取的组合值demo为[0100..00]。然后根据遍历索引来到集合中取值。
上代码:
import java.util.ArrayList; import java.util.Iterator; import java.util.List;public class ComBit {public static void main(String[] args) {// Integer testint[] combination = new int[] { 1, 2, 3, 4 };List<Integer> combinationlist = new ArrayList<Integer>();for (Integer integer : combination) {combinationlist.add(integer);}ComBitIterator<Integer> i = new ComBitIterator<Integer>(combinationlist);while (i.hasNext()) {Object obj = i.next();System.out.println(obj.toString());}// String testString[] str = new String[] { "apple", "orange", "tomato", "potato" };List<String> combinationSlist = new ArrayList<String>();for (String s : str) {combinationSlist.add(s);}ComBitIterator<String> ii = new ComBitIterator<String>(combinationSlist);while (ii.hasNext()) {Object obj = ii.next();System.out.println(obj.toString());}}}class ComBitIterator<T> implements Iterator<T> {private int[] _bitArray = null;protected final int _length;protected final List<T> combination;protected List<T> _currentSet;public ComBitIterator(List<T> combination) {_currentSet = new ArrayList<T>();this._length = combination.size();this._bitArray = new int[_length + 2];this.combination = combination;}@Overridepublic boolean hasNext() {return _bitArray[_length + 1] != 1;}@SuppressWarnings("unchecked")@Overridepublic T next() {_currentSet.clear();for (int index = 1; index <= _length; index++) {if (_bitArray[index] == 1) {T value = combination.get(index - 1);_currentSet.add(value);}}int i = 1;while (_bitArray[i] == 1) {_bitArray[i] = 0;i++;}_bitArray[i] = 1;return (T) _currentSet;}}
------------------------------------------------分割线---------------------------------------------------------
PS:代码源于要求求数字1-20中 任取N的组合后合值为36,于是思路想到两种,第一种是递归,第二种虽然也是递归,但是想弄个通用的,就有了以上的代码。另外群里有人写出了直接递归的代码,也附上:
public static void main(String[] args) {combinateDataOfRange(1, 20, 36);}public static void combinateDataOfRange(int min, int max, int target) {combinateData(0, min, max, target, new Stack<Integer>());}public static void combinateData(int sum, int min, int max, int target,Stack<Integer> stack) {for (int i = stack.isEmpty() ? min : (Integer) stack.lastElement() + 1; i < max; ++i) {int tempSum = sum + i;stack.push(i);if (tempSum == target) {System.out.println(stack + "=" + target);} else {combinateData(tempSum, min, max, target, stack);}stack.pop();}}
转载于:https://www.cnblogs.com/GYoungBean/p/4567023.html
JAVA求集合中的组合相关推荐
- Java求字符串中出现次数最多的字符
Java求字符串中出现次数最多的字符 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51933611 Java ...
- (算法)求数组中数字组合(可多值组合)相加最接近目标数的组合(可能多个)
今天没事,撸一道算法题 题目要求: 给出一个升序排序的可能重复值的数字数组和一个目标值其中目标值大于数组中最小数,求数组中数字组合(可多值组合)相加最接近目标数的组合(可能多个)不考虑空间复杂 ...
- java求集合的交集、差集和并集
一.本文介绍两种写法 1原生写法 2com.google.guava写法 <dependency> <groupId>com.google.guava</grou ...
- java操作集合中 concurrentModifyException 异常的原因分析
java操作集合中 concurrentModifyException 异常的原因分析 参考文章: (1)java操作集合中 concurrentModifyException 异常的原因分析 (2) ...
- 求集合中最大值、最小值、和
求集合中最大值.最小值.和 public class Demo5 {public static void main(String[] args) {List<Integer> nums = ...
- Java 删除集合中指定的元素
使用 Collection 类的 collection.remove() 方法来删除集合中的指定的元素 完整代码 import java.util.*;public class Main {publi ...
- java 求集合真子集_【同步练习】高一高中数学必修1集合的关系与元素性质
一.选择题(每小题2分,共30分) 1.若{1,2,3}A ⊆{1,2,3,4,5},则集合A的个数为( ) A.2B.3C.4D.5 正确答案 B 解析 集合{1,2,3}是集合A的真子集,同 ...
- 回溯法经典算法 求集合中所有的子集
今天我们来看一下子集的问题. 题目描述:给定一个任意集合A,集合的长度为Length,让你打印出这个集合中所包含的所有子集. 题目分析:此问题实际上也是一个遍历树的问题,进行遍历每一个子元素,再进入下 ...
- java遍历集合中的元素_java中如何遍历ArrayList集合中的元素并输出
问题: 假设集合ArrayList中存储的元素是整形数字1~5,遍历每个元素,将每个元素顺序输出. 在线学习视频推荐:java教学视频 示例如下:package work10; import java ...
最新文章
- 当前几个主要的Lucene中文分词器的比较
- 【Mybatis 之应用篇】 4_动态SQL、缓存
- 计算机机房双电源供电,超高效数据机房可靠性浅析——走进腾讯青浦云计算中心...
- idea服务器怎么配置文件,Idea部署远程Docker并配置文件
- Centos下安装mysql(二进制版)
- java synchronized 使用_Java中synchronized的使用实例
- Spring Web应用程序的最大缺陷
- 备份恢复:如何让xtrabackup恢复速度提升20倍?
- 小数加分数怎样计算讲解_反渗透阻垢剂的加药量怎样计算?
- 基于fitter库判断已知数据服从分布——python
- 用Maven创建第一个web项目Struts2项目
- 心情舒畅,升级到u10.04了
- [转注自官网]Cocos2d-x Tutorial 4 - 如何放出子弹(Glede Edition for 2.0.3)
- DoraHacks的笔记
- 堆密度测定的意义_什么叫真密度_真密度的测定_真密度和表观密度、堆积密度-仪器网...
- 有没有测身高的手机软件?这3款App和卷尺一样精准实用
- 【Leetcode】1214. Two Sum BSTs
- 技术美术个人笔记(五)——体素距离场及体积雾
- 智邦科技下一代新技术发布会@MWC上海
- 计数器控制led灯的亮灭
热门文章
- HRESULT返回值说明
- 删除列表中满足一定条件的元素
- [react] React必须使用JSX吗?
- 前端学习(3190):react简介二
- 前端学习(2974):组件重定向
- [vue] watch和计算属性有什么区别?
- [vue] 说说你对vue的template编译的理解?
- 工作148:父子组件传值 获取时间戳
- “约见”面试官系列之常见面试题之第一百零四篇之vue优点(建议收藏)
- “约见”面试官系列之常见面试题第三十五篇之轮循机制(建议收藏)