算法模版之组合问题

问题描述:

给定一个字符串,任取其中的n个字符,求所有可能性。


代码如下

import java.util.Scanner;

class Main {
	public static void main(String[] args) {
		Scanner sc=new Scanner (System.in);
		int n=sc.nextInt();
		String str="ABCDE";
		char a []=str.toCharArray();
		boolean x []=new boolean [a.length];
		f(a,x,n,0);
	}
	static void f(char a [],boolean x [],int num,int start) {//a是需要求的字符数组,x用来判断是否取该位置,num表示需要在a中取几个数,start表示已经取到了第几个数
		if(num==0) {//当num等于0时已经全部取完,直接打印即可
			print(a,x);
			return;
		}
		if(start==a.length) return;//start因为一直在加1,所以一定要加一个判定条件,不然下面的x数组会越界
		x[start]=true;//x当前的start位置变为true,表示取该位置的数
		f(a,x,num-1,start+1);//因为已经取了,所以num的总数需要减1,start位置往前进一位
		x[start]=false;//x当前的start位置变为false,表示不取该位置的数
		f(a,x,num,start+1);//因为没有取,所以num不需要减1,start位置往前进一位
	}
	static void print(char a [],boolean x []) {
		for(int i=0;i<a.length;i++)
			if(x[i]==true)//打印条件,x数组中,为true代表取了,就打印,false代表没取
				System.out.print(a[i]+" ");
		System.out.println();
	}
}

猜你喜欢

转载自blog.csdn.net/habewow/article/details/80424606