1. 程式人生 > >劍指offer-字串的排列

劍指offer-字串的排列

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;      
    }