这题目其实就是很经典的
Cn
m
的问题,即从m个数中选取n个数,要求选出来的数是无序的。
就以下面的例子来演示一下把。
题目:从1,2,3,4,5中随机选取3个数,要求列举出所有的组合。
/**
*
* @author Administrator
*从5个数中随机挑选3个数的所有组合,我们只需要修改str:供挑选的数字集合,
*Length:挑选的数量就可以获取所有的可能。至于故意输出Length大于数组数量的,自己看结果把!^_^
*/
public class Test8 {
static char[] ch;
final static int Length=3;//挑选的数量
static String str="12345";//备选的数
public static void main(String[] args) {
char[] c = str.toCharArray();//分成数组的形式
ch=c;String result="";
show(result, 0, Length);
}
/**
*这里输入的参数含义为,result:已经选择了的数,start:从第start位开始选数,length:还需要选择几个数。
*/
public static void show(String result,int start,int length){
if(length==0){
System.out.println(result);
}else{if(length<=(ch.length-start)){
/**这里我们分成两种情况来分析,比如12345中选三个数,我们选不选1,这个数,
*如果不选,那么执行第一个show方法,如果选,执行第二个show方法,这样我们就可以利用递归列举出所有的可能
*/
show(result, start+1, length);
result+=ch[start];
show(result, start+1, length-1);
}
}
}
结果:
345
245
235
234
145
135
134
125
124
123