思路

将所有字符分成s1 ,s2
已经使用的掉的字符是s1,从s2挑一个与s1组成序列,循环递归,o(n!)
ArrayList<string> arr=new ArrayList<>(set);结构保存在set集合中去重,再构成数组,
Collections.sort(arr);//集合容器的排序,字符串默认字典序排序</string>

代码

import java.util.*;
public class Solution {
    Set<String> set=new HashSet<>();
    public ArrayList<String> Permutation(String str) {
       help("",str);
       ArrayList<String> arr=new ArrayList<>(set);
       Collections.sort(arr);
       return arr;
    }


    public void help(String s1,String s2){
        if(s2.length()<=1){
            if(s1.length()+s2.length()>0){set.add(s1+s2);}
            return;
        }
        for(int i=0;i<s2.length();i++){
            help(s1+s2.charAt(i),s2.substring(0,i)+s2.substring(i+1));
        } 
    }
}