思路
递归求解!
Code
public class n_k {
static void com(int n,int k,String a[],String b[],int m) {
if(k==0) {
for(int i=0;i<b.length;i++)
System.out.print(b[i]+",");
System.out.println();
}else {
for(int i=n;i>=k-1;i--) {
b[m]=a[i];
com(i-1,k-1,a,b,m+1);
}
}
}
public static void main(String[] args) {
Scanner as=new Scanner(System.in);
int n,k;
String s;
while(as.hasNext()) {
s=as.nextLine();
k=as.nextInt();
String t=as.nextLine();
String a[]=s.split(" ");
String b[]=new String[k];
n=a.length;
com(n-1,k,a,b,0);
}
}
}
解析
- com(int n,int k,String a[],String b[],int m)函数中n表示所有字符(字符串)中剩余没取字符(字符串)的个数;
- k表示需要取的字符(字符串)中还需要取的个数;
- 字符串数组a表示所有字符(字符串)的个数;
- 字符串b 表示取了的字符(字符串)的组合;
- m表示下次取字符(字符串)时存放在字符串数组b中的位置。
- 终止递归的条件k==0!
评论区