//借用他人的C语言版本改成java版本 同时懒懒地增加了顺序输出结果
static int total = 0;
static void cur(int k, int m, int n, List usedList, List resultList, List arrayList)
{
if (k<n)
{
for (int x=0;x<m;x++)
{
if ((Integer)usedList.get(x)==0)//not used
{
usedList.set(x, 1);
resultList.set(k,arrayList.get(x));
//递归
cur(k+1,m,n, usedList, resultList, arrayList);
//递归未调用递归时(即k>=0||x!=0)执行这一句
usedList.set(x, 0);
}
}
}
else
{
// 随机排列结果全集输出
// ++total;
// for (int i=0;i<n;i++){
// System.out.print(resultList.get(i));
// }
// System.out.println();
// 判断从小到大排列的,输出
int temp = -2;
for(int j=0;j<n;j++){
if(temp<(Integer)resultList.get(j)){
temp = (Integer)resultList.get(j);
if(j==n-1){
++total;
temp = -2;
for (int i=0;i<n;i++){
System.out.print(resultList.get(i));
}
System.out.println();
}
}else{
//此结果不予输出
break;
}
}
}
}
public static void main(String[] args) {
int m=10;
int n=6;
//10个数字内取6个乱序:6*5*4*3*2*1*((10*9*8*7)/(4*3*2*1))
List arrayList = new ArrayList();
List usedList = new ArrayList();
List resultList = new ArrayList();
for(int i=0;i<m;i++){
arrayList.add(i);
}
for(int i=0;i<m;i++){
usedList.add(0);
}
for(int i=0;i<n;i++){
resultList.add(-1);
}
cur(0,m,n,usedList,resultList,arrayList);
System.out.println("total:"+total);
}