问题描述:
给定一个字符串,任取其中的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();
}
}