字符排序 蓝桥杯真题

来源:互联网 发布:新版yy语音软件下载 编辑:程序博客网 时间:2024/09/21 06:19

算法是这样的,如果给定N个不同字符,将这N个字符全排列,最终的结果将会是N!种。如:给定 A、B、C三个不同的字符,则结果为:ABC、ACB、BAC、BCA、CAB、CBA一共3!=3*2=6种情况。

packageQuestion1_9;importjava.util.Scanner;importjava.util.Vector;publicclass Question1 {         public static long count=0;         private void fullPermutation(Vector<Character>sourse,Vector<Character> result) {                   if(sourse.size()==0){                            for (int i = 0; i< result.size(); i++) {                                     System.out.print(result.elementAt(i));                            }                            System.out.print("\n");                            count++;                            return;                   }                                     for (int i= 0; i < sourse.size(); i++) {                            Vector<Character>tsourse=newVector<Character>(sourse);                            Vector<Character>tresult=newVector<Character>(result);                            tresult.add(sourse.elementAt(i));                            tsourse.remove(i);                            newQuestion1().fullPermutation(tsourse, tresult);                   }         }         public static void main(String[] args){                   Scanner scanner=newScanner(System.in);                   int n=scanner.nextInt();                   Vector<Character>sourse=new Vector<Character>();                   Vector<Character>result=new Vector<Character>();                   for (int i = 0; i < n;i++) {                            sourse.add((char)('A'+i));                   }                   newQuestion1().fullPermutation(sourse, result);                   System.out.println(Question1.count);         }}

方法二:

importjava.util.ArrayList; importjava.util.Iterator; importjava.util.LinkedHashSet; importjava.util.List; importjava.util.Scanner; importjava.util.Set; publicclass Demo03 {     // 去掉重复元素,放入lis      public static void removeDuplicate(Strings,Set<Character> lis){         for(char x:s.toCharArray()){             lis.add(x);         }     }     // 为方便操作 将 sets 转 lis       public static voidconvert(List<Character> lis,Set<Character> sets){         Iterator<Character> iter =sets.iterator();         while(iter.hasNext()){             lis.add(iter.next());         }     }     // 检测符合条件的元素组合      public static voidcheck(Set<Character> sets){         List<Character> lis = newArrayList<Character>();         convert(lis,sets);  // 为方便操作 将 sets 转 lis           StringBuffer sb = newStringBuffer();         for(inti=0;i<lis.size()-2;i++){             for(intj=i+1;j+1<lis.size();j++){   // 向后添加两位,所以 j+1<lis.size()                  for(int k=j+1;k<lis.size();k++){                     sb.append(lis.get(i));                     sb.append(lis.get(j));                     sb.append(lis.get(k));                     System.out.println(sb); // 输出组合                      sb.setLength(0);    // 清空                 }             }         }     }     public static void main(String[]args){         Scanner scan = newScanner(System.in);         System.out.println("输入串(不大于30个字符)。");         String s = scan.nextLine();         Set<Character> sets = newLinkedHashSet<Character>();         removeDuplicate(s,sets);    // 去掉重复元素,放入lis          check(sets);    // 检测符合条件的元素组合      } } 

运行结果:
输入串(不大于30个字符)。
abcd
abc
abd
acd
bcd

1 0
原创粉丝点击