全排列(StringBuffer实现)
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==1for (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);}}}