package Java2012大赛; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; /*实现了n个数在m(n>=m)个位置上的全排列 * */ public class 全排列StringBuffer { static Set set = new HashSet(); static int i;// 要排列的个数 static int j;// 在几个位置排列 static int num = j;// 一个定值 static StringBuffer bf; static int count = 0;// 记录全排列的个数 public static void main(String[] args) throws IOException { int i = Integer.parseInt(javax.swing.JOptionPane .showInputDialog("输入排列的个数")); bf=new StringBuffer(); int j = Integer.parseInt(javax.swing.JOptionPane .showInputDialog("在几个位置排列")); for(int a=0;a<j;a++) bf.append(0); num = j; fx(i, j, num); System.out.println(count); } private static void fx(int i, int j, int num) throws IOException { if (j == 1) {// 如果j==1 for (int a = 1; a <= i; a++) { bf.setCharAt(num - 1, (char)(a+48)); for (int k = 0; k < num - 1; k++) { set.add(bf.charAt(k)-48);//将字符转换为数字例如'1'-48=1; } set.add(bf.charAt(num - 1)-48);//将字符转换为数字例如'1'-48=1; set.add(a); if (set.size() == num) { count++; System.out.println(bf); } set.clear(); } return; } j--; for (int a = 1; a <= i; a++) { bf.setCharAt(num - j - 1, (char)(a+48));//将数字转换为字符例如'1'=48+1; fx(i, j, num); } } }