劍指offer:字串的排列(java)
阿新 • • 發佈:2019-01-08
題目:輸入一個字串,打印出該字串中字元的所有排列。
例如輸入字串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); //每次遞迴固定要排列字元陣列第一個字元不變 } } }