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