用了一个回溯的框架

import java.util.ArrayList;
public class Solution {
    public ArrayList<String> Permutation(String str) {
        ArrayList<String> res = new ArrayList<>();
        if(str==null||str.length()==0) return res;

        char[] chs = str.toCharArray();
        int start = 0;
        helper(chs,start,res);
        return res;
    }

    public void helper(char[] chs, int start, ArrayList<String> res){
        if(start==chs.length){
            if(!res.contains(String.valueOf(chs))) res.add(String.valueOf(chs));
        }
        for(int i=start; i<chs.length;i++){
            swap(chs,i,start);
            helper(chs, start+1, res);
            swap(chs,i,start);
        }
    }

    public void swap(char[] chs, int s, int e){
        char t = chs[s];
        chs[s] = chs[e];
        chs[e] = t;
    }
}