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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419847.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql使用手册_mysql使用手册

mysql使用手册1、mysql登录1.1 远程登陆mysqlmysql -h ip -u root -p 密码1.2 本地登陆mysqlmysql -u root -p 密码2、为数据库配置远程连接权限采用授权法例如&#xff1a;以用户名&#xff1a;root 密码&#xff1a;888888从任何主机连接到mysql服务器先在服务器上用root用户…

Android项目使用Eclipse进行单元测试

Android项目如果每次都整个调试的话&#xff0c;要加载UI&#xff0c;会等很长时间。所以单元测试就显得很方便了。 要进行单元测试&#xff0c;首先得修改下AndroidManifest.xml文件。在Instrument标签里点右侧的Add按钮。然后在弹出的窗口双击 Instrument。然后在右侧就会多出…

mysql union 用法 update_mysql---union的用法

union的作用很简单用来合并两条sql的结果集语法: SQL1 UNION SQL2现有一张价格表要求&#xff1a;求出价格低于2000和价格高于3000的商品&#xff0c;不能用or和not between……and思路&#xff1a;我们可以先求出低于2000的商品得到结果集1再求出高于3000的商品得到结果集2再利…

mysql 中有没有临时表_MySQL临时表的简单用法

当工作在非常大的表上时,你可能偶尔需要运行很多查询获得一个大量数据的小的子集,不是对整个表运行这些查询,而是让MySQL每次找出所需的少数记录,将记录选择到一个临时表可能更快些,然后在这些表运行查询。创建临时表很容易,给正常的CREATE TABLE语句加上TEMPORARY关键字:CREAT…

java中==与equals的区别

值类型是存储在内存中的堆栈&#xff08;以后简称栈&#xff09;&#xff0c;而引用类型的变量在栈中仅仅是存储引用类型变量的地址&#xff0c;而其本身则存储在堆中。 操作比较的是两个变量的值是否相等&#xff0c;对于引用型变量表示的是两个变量在堆中存储的地址是否相同&…

3399 mysql_手动安装 mysql

手动安装 mysql需要在本机 (mac) 上装个 mysql, 看到压缩版的体积最小, 结果进入了手工安装的坑(正常有界面可以安装, 但安装目录将是 / usr/local/mysql), 既然入了坑就填上吧.1, 解压到自己选择的目录, 比如 / data/mysql.2, 初始化数据库: sudo /data/mysql/bin/mysqld --in…

构建之法第11、12章

第11章软件设计与实现 主要讲了典型的开发流程和开发阶段的一些管理方法 问题&#xff1a; 从spec道实现是代码的实现吗&#xff1f; 第12章 用户体验 主要讲了用户体验的各种角度和认识阻力登 问题&#xff1a; 用户的体验是设计前就要考虑的吗&#xff1f;转载于:https://www…

Mybatis多对多,复杂增删改查(特殊需求循环插入,分组查询)

2021.8.31 从25号开始练习复杂的mybatis多对多&#xff0c;从设计数据库思路到实现需求功能转移到实体项目中 1.之前很少看过字符转换的详细内容从今往后会注意字符串转换此项目为转数组&#xff08;date&#xff09;实体项目会有UUID生成的字符串 2.在添加时如果原表设计的首个…

MDI窗体简单方法(调用,闪屏)

MDI窗体简单方法&#xff08;调用,闪屏&#xff09; 调用方式&#xff1a; RibbonForm mdishow new RibbonForm(); //实例化midshow.MdiParent this; //设置在主窗体&#xff0c;以MDI的方式显示&#xff0c;关键属性。mdishou.Show();//显示窗体大伙都会碰到的问题。 解决…

kubernetes mysql pxc_K8S使用operator部署和管理Percona - PXC集群

概述pxc为mysql的一种集群模型&#xff0c;我们结合operator和k8s 完成pxc的部署和扩容硬盘使用local卷&#xff0c;如何管理local卷请翻阅 我的另一篇文章https://www.jianshu.com/p/bfa204cef8c0英文文档详情 https://percona.github.io/percona-xtradb-cluster-operator/con…

Springboot递归树(需求返回List树状结构数据)

一、本主的应用场景 部门里面有一个属性是当前部门的上级部门&#xff0c;而当前部门又会有下级部门&#xff0c;下级部门还有下级部门&#xff0c;这就形成了一个向下无限循环&#xff0c;呈现出树状结构。 二、认识JSONObject JSONObject只是一种数据结构&#xff0c;可以理…

data-role参数表:

data-role参数表&#xff1a; data-role参数表&#xff1a; page 页面容器&#xff0c;其内部的mobile元素将会继承这个容器上所设置的属性 header 页面标题容器&#xff0c;这个容器内部可以包含文字、返回按钮、功能按钮等元素 footer 页面页脚容器&#x…

mysql实现decode_Oracle中的DECODE()函数,MySQL中怎么实现DECODE()函数

decode(条件&#xff0c;值1&#xff0c;返回值1&#xff0c;返回值2) 对应的转换是&#xff1a;case when 条件 值1 then 返回值1 else 返回值2 end举例&#xff1a;oracle&#xff1a;select decode(sex,NULL,男,女)as sex,name,age,score From student_score_tablemysql实…

hubbledotnet mysql_HubbleDotNet 简介

系统简介HubbleDotNet 是一个基于.net framework 的开源免费的全文搜索数据库组件。开源协议是 Apache 2.0。HubbleDotNet提供了基于SQL的全文检索接口&#xff0c;使用者只需会操作SQL&#xff0c;就可以很快学会使用HubbleDotNet进行全文检索。 HubbleDotNet可以实现全文索引…

关于java开发中的实用工具Hutool工具类

Hutool是一个小而全的Java工具类库&#xff0c;通过静态方法封装&#xff0c;降低相关API的学习成本&#xff0c;提高工作效率&#xff0c;使Java拥有函数式语言般的优雅&#xff0c;让Java语言也可以“甜甜的”。 Hutool中的工具方法来自于每个用户的精雕细琢&#xff0c;它涵…

【转】WEB前端调优

首先从一次完整的的请求说起&#xff1a;&#xff08;以此为例get,www,baidu.com&#xff09; 1&#xff0c;webbrower 发出request&#xff0c; 2&#xff0c;然后解析www.baidu.com为ip,找到ip的服务器&#xff0c; 3&#xff0c;服务器处理请求资源并返回请求的内容&#xf…