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);
}
}
}
全排列(StringBuffer实现)
最新推荐文章于 2021-02-19 14:38:42 发布