暴力迭代,第n个字符及前面的字符形成的字符串的全排列要先计算第n-1个字符及前面字符形成的字符串的全排列

    public ArrayList<String> Permutation(String str) {
        ArrayList<String> res=new ArrayList<>();
        if(str==null || str.length()==0){
            return res;
        }
        char [] chars=str.toCharArray();
        ArrayList<String> tmp1=new ArrayList<>();
        ArrayList<String> tmp2=new ArrayList<>();
        for(int i=0;i<chars.length;i++){
            if(i==0){
                tmp1.add(new String(chars[i]+""));
            }else{
                for(int k=0;k<tmp1.size();k++){
                    String strTmp=tmp1.get(k);
                    String midStr=null;
                    for(int j=0;j<strTmp.length()+1;j++){
                        midStr=strTmp.substring(0,j)+chars[i]+strTmp.substring(j);
                        if(!tmp2.contains(midStr)){
                            tmp2.add(midStr);
                        }
                    }
                }
                tmp1=new ArrayList(tmp2);
                tmp2.clear();
            }
        }
        res=tmp1;
        Collections.sort(res);
        return res;
    }