排列组合java源代码及jar包

import cn.com.likeshow.util.ArrangeResultListener;
import cn.com.likeshow.util.Arrangement;
import cn.com.likeshow.util.Combination;
import cn.com.likeshow.util.CombinationResultListener;
import cn.com.likeshow.util.IndexOutOfBoundsException;

//先组合 后 排列 示例
public class test {

	public static void main(String[] args) throws IndexOutOfBoundsException {
		//创建排列对象时,把监听器传入,产生结果时会回调arrangeResult(int[] result)方法
		final Arrangement arrangement=new Arrangement(new ArrangeResultListener() {
			@Override
			public void arrangeResult(int[] result) {
				for(int i=0;i<result.length;i++)
					System.out.print(result[i]+" ");
				System.out.println();
			}
		});
		//创建组合对象时,把监听器传入,产生结果时会回调combinationResult(int[] result) 方法
		Combination combination=new Combination(new CombinationResultListener() {
			@Override
			public void combinationResult(int[] result) {
				System.out.println("组合结果");
				for(int i=0;i<result.length;i++)
					System.out.print(result[i]+" ");
				System.out.println("\n\n排列结果");
				//设置参数.Arrangement.setArguement(int... arr)
				arrangement.setArguement(result);
				//开始执行
				arrangement.execute();
				System.out.println("==============\n");
			}
		});
		//设置参数    setArguement(int selectCount, int... arr) 
		//                throws IndexOutOfBoundsException
		//selectCount小于1或大于数组长度时抛出异常
		combination.setArguement(3,1,2,3,4,5);
		//开始执行
		combination.execute();
	}
}

 

 

 

 

 

 

======================源码如下====================================
package cn.com.likeshow.util;

public class Arrangement {

	private ArrangeResultListener arrangeResultListener;
	private int[]arr;
	
	public Arrangement(ArrangeResultListener arrangeResultListener){
		this.arrangeResultListener=arrangeResultListener;
	}
	
	public void setArguement(int...arr){
		this.arr=arr;
	}
	public void execute(){
		int result[]=new int[arr.length];
		boolean used[]=new boolean [arr.length];
		DFS(arr,result,used,0, arr.length); 
	}
	
	private  void DFS(int[] arr, int[] result, boolean[] used, int layer, int size) {
		if(layer==size){
			int []res=new int[arr.length];
			for(int i=0;i<size;i++){
				res[i]=result[i];
			}
			arrangeResultListener.arrangeResult(res);
			return;
		}
		
		for(int i=0;i<size;i++){
			if(used[i]==false){
				used[i]=true;
				result[layer]=arr[i];
				DFS(arr,result,used,layer+1, size);
				used[i]=false;
			}
			
		}
	}

}


 

package cn.com.likeshow.util;


public class Combination {

	private CombinationResultListener combinationResultListener;
	private int[]arr;
	private int selectCount;
	
	public Combination(CombinationResultListener combinationResultListener) {
		this.combinationResultListener = combinationResultListener;
	}
	
	public void setArguement(int selectCount,int... arr) throws IndexOutOfBoundsException{
		if(selectCount<1||selectCount>arr.length)
			throw new IndexOutOfBoundsException(selectCount);
		this.arr=arr;
	
		this.selectCount=selectCount;
	}
	public void execute(){
		int result[]=new int[arr.length];
		DFS(arr,1,arr.length,selectCount,result,0);
	}
	
	private void  DFS(int[] arr,int layer,int size,int selectCount,int[] result,int startIndexInThisLayer){

		int i=0,k=0;
		if(layer==selectCount){
			
			for(i=startIndexInThisLayer;i<size;i++){
				int[]integers=new int[selectCount];
				for(k=0;k<layer-1;k++ ){
					integers[k]=result[k];
				}
				integers[k]=arr[i];
				combinationResultListener.combinationResult(integers);
			}
			
			return;
		}

		for(i=startIndexInThisLayer;i<size-selectCount+layer;i++){
			result[layer-1]=arr[i];
			DFS(arr,layer+1,size,selectCount,result,i+1);
		}

	}
	
}

package cn.com.likeshow.util;

public interface ArrangeResultListener {

	public void arrangeResult(int[] result);
}


 

 

package cn.com.likeshow.util;

public interface ArrangeResultListener {

	public void arrangeResult(int[] result);
}


 

package cn.com.likeshow.util;

public interface CombinationResultListener {

	public void combinationResult(int[] result);
}


 

package cn.com.likeshow.util;

public class IndexOutOfBoundsException extends Exception {
	
	private static final long serialVersionUID = 1615123678847500568L;

	public IndexOutOfBoundsException(int len){
		super(len+"");
		
	}
}


 

 

jar包下载链接  http://pan.baidu.com/s/1kTIAg7P

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值