算法——组合篇01

现在有一个数组array[]={1,2,3,4};要求从4个数中取出两个,不重复,组合公式C4^2=6种,即12,13,14,23,24,34.根据这个过程我们可以考虑按从小到大的顺序遍历数组,然后递归执行。

具体代码如下:

方法一:

package hello.ant;

public class AlogZH{
	
	public static void main(String[] args) {
		int array[]={1,2,3,4};
		int n=2;
		int result[]=new int[n];
		ZH(array, result, 0,0,n);
	}
	static void ZH(int array[],int result[],int index,int begin,int length){
		if(length==0){
			for(int i=0;i<result.length;i++){
				System.out.print(result[i]);
			}
			System.out.println();
		}else{
			for(int i=begin;i<array.length;i++){
				result[index]=array[i];
				ZH(array, result, index+1,i+1, length-1);
			}
		}
	}
	
}
方法二:

package hello.ant;

public class AlogZH2 {
	static int n=2;
	static int result[]=new int[n];
	static int array[]={1,2,3,4,5};
	static boolean flag[]=new boolean[array.length];
	public static void main(String[] args) {
		ZH(0, 0);
		
	}
	static void ZH(int index,int begin){
		if(index==n){
			for(int i=0;i<result.length;i++){
				System.out.print(result[i]);
			}
			System.out.println();
		}else{
			for(int i=begin;i<array.length;i++){
				if(flag[i]){
					continue;
				}
				flag[i]=true;
				result[index]=array[i];
				ZH(index+1,i+1);
				flag[i]=false;
			}
		}
	}
}

对于这类问题的分析,感觉就是从宏观上把握它的处理过程,先是一个for循环遍历从下标为0一直到最后一个元素,在循环内部在递归代用本方法,传递参数的时候注意,让它从当前下标+1进行。不断递归,就可以实现题目要求的结果,整体上把握这个过程,就不会错,具体细节,需要多调试,观察。

参考了http://blog.csdn.net/hymanxq/article/details/24490419这篇文章的内容。。


你可能感兴趣的:(算法,递归,遍历)