排列组合算法题目

package com.evertrip.etdspro.test.zf.dotw;

/**
 * 从指定数组中取出任意个数 , 使其和为m (不可重复取)
 * 思路:以任意组合一个数组为基础。 
 * @author zhoufeng
 *
 */
public class Zuhe4 {

	static void printArray(int array [], int len){
		for (int i = 0; i < len; i++) {
			System.out.print(array[i] + "  ");
		}
		System.out.println();
	}

	/**
	 * 从array里面组合n个元素 ,使其和等于m
	 */
	static void beibao(int array[] , int tmp[] , int arrayIndex , int tmpIndex , int sum , int m ){
		
		for (int i = arrayIndex ; i < tmp.length; i++) {
			tmp[tmpIndex] = array[i];  
			int result = sum + array[i];  // 这里千万不要用 sum += array[i] ; 否则会印象下一轮循环
			if(result == m)
				printArray(tmp , tmpIndex + 1);
			else if(result > m){
				return ;
			}
			beibao(array , tmp , i + 1 , tmpIndex + 1 , result , m);
		}
	}
	
	static void beibao(int array[] , int m){
		beibao(array , new int[array.length] , 0  , 0 ,0 , m);
	}

	public static void main(String[] args) {
		int array [] = {1 , 2,  3 , 4 , 5};
		beibao(array , 6);
	}

}



package com.zf.action;

/** 
 * 从指定数组中取出n个数 , 使其和为m  (可重复取)
 * 思路:以从数组中组合n个元素为基础
 * @author zhoufeng 
 * 
 */  
public class ZhuHe01 {

	static void printArray(int array[]){
		for (int i : array) {
			System.out.print(i + "  ");
		}
		System.out.println();
	}  

	static void zhuhe(int[] array , int tmp[] , int arrayIndex , int tmpIndex , int sum , int m ){
		if(tmpIndex == tmp.length){
			if(sum == m)
				printArray(tmp);
			return ;
		}
		for (int i = arrayIndex; i < array.length; i++) {  
			tmp[tmpIndex] = array[i];  
			int result = sum + array[i];
			if(result > m)
				return ;
			zhuhe(array ,tmp , i ,  tmpIndex + 1 , result , m);
		}

	}

	static void zhuhe(int array[] , int len , int m){
		zhuhe(array , new int[len] , 0 , 0  , 0 , m) ;
	}

	public static void main(String[] args) {
		int array[] = {1 , 2 , 3, 4 , 5 ,6 , 7 , 8 ,9 };
		zhuhe(array , 3 , 10);

	}

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值