/**
- 题目要求:随意输入n位正整数,(其中数字可重复例如112235),求出它的全排列情况(笔者用的是java实现,递归调用来实现具体算法)
**/
代码如下:
package com.gnnu2016;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class randomAssortment {
/**
* 定义一个保存所有随机组合情况的动态数组
*/
public static ArrayList<String>list=new ArrayList<String>();
public static void main(String[] args) {
long num = -1;
Scanner input=new Scanner(System.in);
/**
* 判断数据的正确性
*/
do{
System.out.println("请输入一个正整数:");
try{
num=input.nextInt();
}catch(Exception e){
input.nextLine();
System.out.println("输入错误,请重新输入!!");
}
}while(num<0);
String string=Long.toString(num);
String[]strings=string.split("");
//调用函数,实现对list的填充所有的排列组合情况
getRandom(strings,0,strings.length-1);
//打印输出所有情况
System.out.println("一共有"+list.size()+"种不同的排列,分别是:");
for(int i=0;i<list.size();i++){
System.out.print(list.get(i)+" ");
if((i+1)%10==0){
System.out.println();
}
}
System.out.println();
}
public static void getRandom(String[]strings,int start,int end){
StringBuffer sBuffer=new StringBuffer();
String string=null;
/*
* 一种排列情况已经出来了
*/
if(start==end){
for(int i=0;i<=end;i++){
sBuffer.append(strings[i]);
}
string=sBuffer.toString();
//判断该组合情况是否已经存在,如果不存在就添加该情况
if(!list.contains(string)){
list.add(string);
}
}else{
for(int i=start;i<=end;i++){
String temp=strings[start];
strings[start]=strings[i];
strings[i]=temp;
//递归调用,直到start==end时表示递归结束
getRandom(strings, start+1, end);
temp=strings[start];
strings[start]=strings[i];
strings[i]=temp;
}
}
}
}
如有不足之处,还望多多指点。。