给你任意一个字符串,要求你给出此字符串不同排序的数量并显示?
如给出字符串"abc",其有如下6种排序
 "abc"、"acb"、"cba"、"cab"、"bac"、"bca"

解决方案 »

  1.   

     递归问题(二)public class AllSort{ 
        public static void main(String[] args) { 
            char buf[]={'a','b','c'};         perm(buf,0,buf.length-1); 
        } 
        public static void perm(char[] buf,int start,int end){ 
            if(start==end){//当只要求对数组中一个字母进行全排列时,只要就按该数组输出即可 
                for(int i=0;i<=end;i++){ 
                    System.out.print(buf[i]); 
                } 
                System.out.println();    
            } 
            else{//多个字母全排列 
                for(int i=start;i<=end;i++){ 
                    char temp=buf[start];//交换数组第一个元素与后续的元素 
                    buf[start]=buf[i]; 
                    buf[i]=temp; 
                    printArray(buf); 
                     
                    perm(buf,start+1,end);//后续元素递归全排列 
                     
                    temp=buf[start];//将交换后的数组还原 
                    buf[start]=buf[i]; 
                    buf[i]=temp; 
                    printArray(buf); 
                } 
            } 
        } 
        public static void printArray (char[] charArray){ 
            System.out.print("Now the array includes: "); 
            for (int i=0; i<charArray.length; i++){ 
                System.out.print(charArray[i]); 
            } 
            System.out.println(""); 
        } 
    }
      

  2.   

    先将字符串打碎成单个字符,那么如例就是 “a","b","c",在对这3个字符串进行排列组合,就会有6个可能,然后将这6个字符串存入到hashSet中,就会自动去掉重复的元素,然后去size()得到个数,遍历显示所有组合
      

  3.   

    下面的程序代码比较简练,算法解释起来也有点麻烦,我大致说一下。
    用循环遍历你要操作的字符串的每一个字符,对每一个字符,用它把原来的字符串分隔成3个部分比如说  "abcd" , 我可以用字符 a 把它分成三个部分: "" 、"a" 和 "bcd" ,也可以用字符 b 把它分成这样三分: "a" 、"b"和 "cd" 。这样分隔的作用是这样的,要找出 "abcd" 的所有排序, 我们可以让 a 排在最前面,然后找出 "bcd"字符串的各种排序(这个求解过程可以用递归完成),并放在 a 的后面。同样的道理,我们可以找出以 b 开头的各种排序方式,这时就需要递归的去求 "abcd" 中除了 b 以外的各个字符组成的字符串(也就是"a" 和 "cd" 两部分组成的新字符串"acd" ,这也就是我要把一个字符串分成三部分的原因)的排序。代码如下:import java.util.Scanner;public class TTT{ 
    static int count=0;
    static String s=""; //中间变量
        public static void main(String[] args) { 
            String str="abcd";
    //      用下面两行代码可以通过键盘输入你要操作的字符串
    //      Scanner in=new Scanner(System.in);
    //      str=in.nextLine();
            getStr(str);
            System.out.println("总共有 "+count+" 种不同的排列方式");
        } 
        public static void getStr(String str){
         if(str.equals("")){
         count++;
         System.out.println(s);
         }
            for(int i=0;i<str.length();i++){ 
                s+=str.charAt(i);
                String newStr=str.substring(0, i)+str.substring(i+1);
                getStr(newStr);
                s=s.substring(0,s.length()-1);   
            }   
        } 
    }
      

  4.   


    public class QuanPaiLei { public static int MAX = 4; public static boolean state[] = new boolean[MAX + 1]; public static int item[] = new int[MAX + 1]; public static String element[] = { "a", "b", "c","d" }; public static void main(String[] args) {
    DoPermutation(1);
    } public static void DoPermutation(int pos) {
    if (pos > MAX) {
    for (int j = 1; j <= MAX; j++)
    System.out.print(element[item[j] - 1]);
    System.out.println();
    return;
    }
    for (int i = 1; i <= MAX; i++) {
    if (!state[i]) {
    state[i] = true;
    item[pos] = i;
    DoPermutation(pos + 1);
    state[i] = false;
    }
    }
    }
    }
    这样也可以