字典序全排列(java實現)


import java.util.Arrays;
/**
*字典序全排列
*字符串的全排列
*比如單詞"too" 它的全排列是"oot","oto","too"
*1,從右端開始掃描,若出現前一個比后一個小,記錄前一個的元素下表index
*2,再找出index以后比該元素大的中的最小值的下標,(實現見 下面的getMin方法)
*3,index以后的元素實現反轉(實現 見下面的reverse方法)
*結束條件:前一個都比后一個大的情況
*/
public class StringExpress{
   int getMin(char[]input,int index){
        char min=input[index];
        int minIndex=index+1;
        char result='z';
        for(int i=index+1;i<input.length;i++){
              if(input[i]>min&&input[i]<result){
                  result=input[i];
                  minIndex=i;
              }
        }
        return minIndex;
   }
   void exchange(char []input,int index,int minIndex){
           char temp=input[index];
           input[index]=input[minIndex];
           input[minIndex]=temp;
   }
   void reverse(char input[],int first,int end) {
      while(first<end){
           exchange(input,first,end);
           first++;
           end--;
      }
   }
   void getDictionary(char c[]){
       System.out.println(new String(c));
       //boolean flag=true;
       int i=0;
       while(true){
         i=c.length-1;
          for(;i>0;i--){
               if(c[i-1]<c[i])break;
          }
          if(i==0)break;
          int minIndex=getMin(c,i-1);
          exchange(c,i-1,minIndex);
          reverse(c,i,c.length-1);
          System.out.println(new String(c));
       }
       
   }
   public static void main(String []args){
    String input="aat";
    char [] c=input.toCharArray();
    Arrays.sort(c);
    new StringExpress().getDictionary(c);
   }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM