从M个元素中取N个元素组合

#将核心的部分改为泛型

/**
 * @author Bob.chen
 * @date 2018年11月22日-下午2:47:50
 * @desc 组合,从M个元素中取N个元素组合
 */

public class Combination {

	/**
	 * 
	 * @desc 
	 * @author Bob.chen   
	 * @param input 输入
	 * @param output 临时保存组合
	 * @param index 长度索引
	 * @param start 开始索引
	 * @param r void 返回值
	 * @throws
	 */
	public <E> void dfs(E[] input, E[] output, int index, int start,List<List<E>> r) {
		if (index == output.length) {
			r.add(Lists.newArrayList(output));
		} else {
			for (int j = start; j < input.length; j++) {
				output[index] = input[j];
				dfs(input, output, index + 1, j + 1,r);
			}
		}
	}

	private static class CombinationHandler {
		private static Combination instance = new Combination();
	}

	private Combination() {
	}

	public static Combination getInstance() {
		return CombinationHandler.instance;
	}
	
	public static void main(String[] args) {
		String[] input = { "A", "B", "C","D"};
		int N = 2;// 组合长度
		String[] output = new String[N];
		List<List<String>> r = new ArrayList<List<String>>();
		Combination.getInstance().dfs(input, output, 0, 0,r);
		System.out.println(r);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值