首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

全排列(StringBuffer兑现)

2013-04-12 
全排列(StringBuffer实现)package Java2012大赛import java.io.Fileimport java.io.FileOutputStreamim

全排列(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);}}}

热点排行