java 排列组合_java 高效率的排列组合算法(java实现)
package BeanUtil;
import java.util.ArrayList;
import java.util.List;
import com.work.core.exception.OurException;
/**
* 统计任三出现的最多的几率的组合
*
* @author wangmingjie
* @date 2009-1-1下午01:22:19
*/
public class Copy_2_of_StatisAnyThree {
// 组合算法
// 本程序的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标
// 代表的数被选中,为0则没选中。
// 首先初始化,将数组前n个元素置1,表示第一个组合为前n个数。
// 然后从左到右扫描数组元素值的“10”组合,找到第一个“10”组合后将其变为
// “01”组合,同时将其左边的所有“1”全部移动到数组的最左端。
// 当第一个“1”移动到数组的m-n的位置,即n个“1”全部移动到最右端时,就得
// 到了最后一个组合。
// 例如求5中选3的组合:
// 1 1 1 0 0 //1,2,3
// 1 1 0 1 0 //1,2,4
// 1 0 1 1 0 //1,3,4
// 0 1 1 1 0 //2,3,4
// 1 1 0 0 1 //1,2,5
// 1 0 1 0 1 //1,3,5
// 0 1 1 0 1 //2,3,5
// 1 0 0 1 1 //1,4,5
// 0 1 0 1 1 //2,4,5
// 0 0 1 1 1 //3,4,5
public static void main(String[] args) {
Copy_2_of_StatisAnyThree s = new Copy_2_of_StatisAnyThree();
s.printAnyThree();
}
/**
*
*/
public void printAnyThree(){
int[] num = new int[]{1,2,3,4,5,6};
print(combine(num,3));
}
/**
* 从n个数字中选择m个数字
* @param a
* @param m
* @return
*/
public List combine(int[] a,int m){
int n = a.length;
if(m>n){
throw new OurException("错误!数组a中只有"+n+"个元素。"+m+"大于"+2+"!!!");
}
List result = new ArrayList();
int[] bs = new int[n];
for(int i=0;i
bs[i]=0;
}
//初始化
for(int i=0;i
bs[i]=1;
}
boolean flag = true;
boolean tempFlag = false;
int pos = 0;
int sum = 0;
//首先找到第一个10组合,然后变成01,同时将左边所有的1移动到数组的最左边
do{
sum = 0;
pos = 0;
tempFlag = true;
result.add(print(bs,a,m));
for(int i=0;i
if(bs[i]==1 && bs[i+1]==0 ){
bs[i]=0;
bs[i+1]=1;
pos = i;
break;
}
}
//将左边的1全部移动到数组的最左边
for(int i=0;i
if(bs[i]==1){
sum++;
}
}
for(int i=0;i
if(i
bs[i]=1;
}else{
bs[i]=0;
}
}
//检查是否所有的1都移动到了最右边
for(int i= n-m;i
if(bs[i]==0){
tempFlag = false;
break;
}
}
if(tempFlag==false){
flag = true;
}else{
flag = false;
}
}while(flag);
result.add(print(bs,a,m));
return result;
}
private int[] print(int[] bs,int[] a,int m){
int[] result = new int[m];
int pos= 0;
for(int i=0;i
if(bs[i]==1){
result[pos]=a[i];
pos++;
}
}
return result ;
}
private void print(List l){
for(int i=0;i
int[] a = (int[])l.get(i);
for(int j=0;j
System.out.print(a[j]+"/t");
}
System.out.println();
}
}
}
java 排列组合_java 高效率的排列组合算法(java实现)相关推荐
- java程序结构_Java 程序结构说明(学习 Java 编程语言 004)
1. 一个简单的类 创建 FirstSample.java 文件,来编写最简单的 Java 应用程序.下面是示例代码: public class FirstSample { public static ...
- java怎么打开_java开不了怎么办?java怎么打开?
我们在打开java软件的时候,总是提示打不开,这可急坏了小伙伴,软件打不开,就无法写程序了,那么接下来,我们就来给大家讲解一下java开不了的解决方法. 1.先保证正确安装了JAVA环境. 2.再打开 ...
- java c 速度_Java和C#运行速度对比:Java比C#快约3倍
测试条件: Java版本: Java 8, .NET版本:v4.0, Release模式,针对x86平台优化 单线程模式. Java代码: package javatest; public class ...
- java标识符区分大小写_java标识符区分大小写怎么区分?Java入门教程
在Java中,标识符的规则区分与C语言语言是极其严格的,写错程序就会爆红,下面我们就来了解一下Java中举报的标识符规则吧. 标识符指程序中用来标识某个实体的一个符号,不同环境下的标识符有不同的意义. ...
- java连接phpstudy_java,_java连接Oracle数据库问题,java - phpStudy
java连接Oracle数据库问题 五月 23, 2016 11:09:27 上午 org.apache.catalina.core.StandardWrapperValve invoke 严重: S ...
- openjdk java字体库_java - 在Linux上为Openjdk Java定义/安装的字体在哪里
在Ubuntu上安装了Oracle 8 jdk,在jre / lib中,它具有各种fontProperties文件以及一个包含字体的字体目录.但是,在安装OpenJdk 8时,jre / lib中的字 ...
- java加密框架_Java加密解密(一)Java加密体系基础
标签: Java加密解密(一)Java加密体系基础 1. JCA(Java Cryptography Architecture) 提供基本的加密框架,如证书,数字签名,消息摘要和密钥对生成器.其主要实 ...
- java左右摇摆_java – 按边缘排列摇摆组件
是否可以排列摆动组件? 组件位于单独的面板中,两者都使用流动布局.这两个面板位于使用网格布局的另一个面板中. 你可以看到有一个微妙的区别,我觉得很烦人.我知道所有的jlabels [蓝色/紫色的矩形都 ...
- java显示字母数字组合_Java字母加数字组合比较大小
针对字符串是数字和字母结合而进行的,如"a20"和"a9";比较而得出结果是"a20">"a9".这种情况直接调用 ...
最新文章
- VisualStudioCode 中设置中文语言【图文教程】
- CVPR 2020 | ActBERT: 自监督多模态视频文字学习
- c++ 输出二进制_【位运算与状态压缩】二进制的魅力
- E. 存储过程(procedure)
- hierarchy change in CRM - step2 outbound R3AUIBASE queue
- 【渝粤题库】陕西师范大学291003综合英语(三)作业(高起专、高起本)
- [转]在资源管理器中使鼠标右键增加一个命令,运行cmd,同时使得当前路径为资源管理器当前的目录...
- php有lambda表达式吗,Python中lambda表达式的简单介绍(附示例)
- 牛客 String II
- [再寄小读者之数学篇](2014-05-30 平均值不等式)
- windows mac linux 木马,针对Linux Windows macOS系统Adwind木马广告攻击
- Raki的读paper小记:A Concise Model for Multi-Criteria Chinese Word Segmentation with Transformer Encoder
- Air系列模块常见问题列表
- localhost 127.0.0.1 本机IP
- 后台管理系统架构成型
- 冰点还原精灵DeepFreeze重启后图标不见了
- waves系统服务器,waves服务器:插件挂多了电脑宕机了?Impact Server服务器拯救你的电脑CPU!...
- IIS 访问页面出现500 – 内部服务器错误的解决方案
- 简洁风个人主页(1) html 静态布局
- 因增强导致BDC录屏执行异常的梗
热门文章
- Michael kors OutletSales Institution 21 year’s
- 硕士生一字不差抄袭顶会论文投稿,北理工:严重学术不端,留校察看
- 解决ios微信浏览器时间不兼容的问题
- 从零开始java文件服务器篇:文件服务器
- Findbugs工具的使用
- C	The Party and Sweets(思维 + 贪心)
- 计算机辅助教学常用的教学模式,计算机辅助教学的“两种模式”
- ptp(precision time protocol)时钟同步
- C++和Java应该怎么选择(转)
- 祝大家元旦快乐,新年快乐!