1. 程式人生 > >劍指offer:字串的排列(java)

劍指offer:字串的排列(java)

題目:輸入一個字串,打印出該字串中字元的所有排列。

例如輸入字串abc,則列印由字元a,b,c所能排列出來的所有字串:abc,abc,bac,bca,cab,cba

  我們求整個字串的排列,可以看成兩步:首先求出所有可能出現在第一個位置的字元,即把第一個字元和後面所有的字元交換。第二步固定第一個字元,求後面所有字元的排列。這個時候我們仍把後面的所有字元分成兩部分:後面字元的第一個字元,以及這個字元之後的所有字元。然後把第一個字元逐一和它後面的字元交換……

      
    public void swap(char[] arr,int idx1,int idx2){  
        char temp = arr[idx1];  
        arr[idx1] = arr[idx2];  
        arr[idx2] = temp;  
    }  
    public void permutation(char[] arr,int index,int size){  
        if(index == size){  
            for(int i = 0;i<arr.length;i++){  
                System.out.print(arr[i]+ "");  
            }  
            System.out.println();  
        }  
        else{  
            for(int i = index;i<size;i++){                
                swap(arr,i,index);    //我們從index向後掃描每一個字元(即指標i指向的字元),交換index和i指向的字元 
                permutation(arr,index+1,size);  //對index後面的字元陣列遞迴地做排列操作  
                swap(arr,i,index);  //每次遞迴固定要排列字元陣列第一個字元不變
            }  
        }  
    }