劍指offer-字串的排列
阿新 • • 發佈:2018-12-11
27.字串的排列
題目描述
輸入一個字串,按字典序打印出該字串中字元的所有排列。例如輸入字串abc,則打印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。
解題思路:由於題目要求最後按字典順序列印,我們用TreeSet結構來儲存,最後再用list加入set返回list,先將a固定,對b,c進行排列,再將b固定對a,c排列,再將c固定,對a,b進行排列
public void result(char[] ch,int start,int end,TreeSet<String> set) { if(start==end) set.add(String.valueOf(ch)); else{ for(int i=start;i<=end;i++) { swap(ch,start,i); result(ch,start+1,end,set); swap(ch,start,i); } } } public void swap(char[] arr,int a,int b) { char temp=arr[a]; arr[a]=arr[b]; arr[b]=temp; } public ArrayList<String> Permutation(String s) { ArrayList<String> list=new ArrayList<>(); if(s==null || s.length()==0) return list; TreeSet<String> set=new TreeSet<>(); char[] ch=s.toCharArray(); result(ch,0,ch.length-1,set); list.addAll(set); return list; }