1.思路
使用递归实现,每个元素都有两种选择,要么被选中,要么不选,只要选中的元素达到了m个,就可以输出了。
2.代码
package cn.edu.hit;
import java.util.Scanner;
public class Permutations1 {
private static int[] record;
public static void main(String[] args) {
//n个元素中选m个
int n,m;
Scanner in = new Scanner(System.in);
n = in.nextInt();
m = in.nextInt();
int[] array = new int[n];
for (int i = 0; i < array.length; i++) {
array[i] = in.nextInt();
}
record = new int[n];
Permutations1 p = new Permutations1();
p.sort(0, m,array);//两个方法都可以
p.back(0,m.array);//两个方法都可以
}
public void sort(int k,int m,int[] array){
if(m==array.length-k){
for (int i = k; i < array.length; i++) {
record[i] = 1;
}
for (int i = 0; i < array.length; i++) {
if(record[i]==1){
System.out.print(array[i]+" ");
//record[i] = 0;
}
}
System.out.println();
return;
}else if((m==0 || (k==array.length && m==0)) && k<array.length){
for (int i = 0; i < array.length; i++) {
if(record[i]==1){
System.out.print(array[i]+" ");
//record[i] = 0;
}
}
System.out.println();
return;
}else if(m>array.length-k || k==array.length){
return;
}else{
if(m==0){
return;
}
for (int i = k; i < array.length; i++) {
record[i] = 1;
sort(i+1,m-1,array);
record[i] = 0;
//sort(k+1,m,array,count-1);
}
}
}
public void back(int k,int m,int[] array){
if(m==0 && k<=array.length){
for (int i = 0; i < array.length; i++) {
if(record[i]==1){
System.out.print(array[i]+" ");
//record[i] = 0;
}
}
System.out.println();
return;
}else if(m>array.length-k || k==array.length){
return;
}else{
record[k] = 1;
back(k+1, m-1, array);
record[k] = 0;
back(k+1, m, array);
}
}
public Permutations1(){}
}