import java.util.ArrayList;
import java.util.List;
public class Copy_2_of_StatisAnyThree {
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;
List result = new ArrayList();
int[] bs = new int[n];
for(int i=0;i<n;i++){
bs[i]=0;
}
//初始化
for(int i=0;i<m;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<n-1;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<pos;i++){
if(bs[i]==1){
sum++;
}
}
for(int i=0;i<pos;i++){
if(i<sum){
bs[i]=1;
}else{
bs[i]=0;
}
}
//检查是否所有的1都移动到了最右边
for(int i= n-m;i<n;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<bs.length;i++){
if(bs[i]==1){
result[pos]=a[i];
pos++;
}
}
return result ;
}
private void print(List l){
for(int i=0;i<l.size();i++){
int[] a = (int[])l.get(i);
for(int j=0;j<a.length;j++){
System.out.print(a[j]+"\t");
}
System.out.println();
}
}
}
分享到:
相关推荐
简单的组合算法,一个递归的应用示例,递归减少了很多代码
Java排列组合算法 - 郭睿的专栏 - CSDN博客Java排列组合算法 - 郭睿的专栏 - CSDN博客
java语言编写的gray码生成组合的程序代码,包括界面,组合数学作业。
6位数,共有几种排列组合的算法,java实现
排列组合 排列 组合 java排列组合算法 排列组合算法
本资源附带文档解释了排列组合算法的实现和原理。其中排列算法是基于递归实现的,组合算法是基于高效的位移法实现的。代码是使用Java版实现的。
Java排列组合算法
Java排列组合_组合算法,利用list及set的无序性, 通过递归实现,不同于以往的排列组合 自娱自乐
排列组合算法实现,支持模板类。支持重复数的排列。算法采用递归方法,简单易懂。
此外,文档还提供了各种排列组合算法的详细代码示例和实现细节,包括递归和迭代方法。文档还涵盖了高级主题,如如何计算有重复元素的排列组合数量,以及如何优化这些算法的性能。 无论您是Java编程的初学者还是有...
所使用的算法应该是效率最高的算法,而且这两个类都只是对需要排列组合的数组的下标进行处理,所以能对任何类型的数组进行排列组合。
基于java的国密SM系列加解密算法,包含SM1、SM2、SM3、SM4的加解密java实现
用java语言写的组合数学中生成排列算法的代码,并由界面
组合算法JSP程序,以java算法为基础,描述组合算法的运行机制和实现
NULL 博文链接:https://xieyan30.iteye.com/blog/1814117
System.out.println("对整数数组进行组合:C(n,n)"); int[] intArray=new int[4]; for(int i=0;i;i++){ intArray[i]=i+1; } System.out.println("对整数数组进行组合:C(4,4)"); Combination ...
该资源为本人自己写的交叉组合算法代码的工具类,一共两个,搭配文章看效果更好!
Java递归算法构造JSON树形结构,Java递归算法构造JSON树形结构Java递归算法构造JSON树形结构
原先在网上找到某位大虾写的一个简单的背包算法,于是在其基础上改成适合我们目前项目中要求的...值)条件的1个最优组合。不知能否大致符合您的要求,我把源码共产了,其中还包含一个例子,望您多多指教。谢谢您的光临!
原理就是把结果集的SKU中key值进行更小拆分组合,把拆分和组合后的结果信息放到SKUResult里面,这样在初始化一次完成,后面的选择可以根据这个结果集使用。把组合范围减少到key里面,这样能够搜索范围避免递归,而且...