递归求解

import java.util.*;
public class Solution {
    ArrayList<String> res = new ArrayList<String>();
    public ArrayList<String> Permutation(String str) {
        if (str == null || str.length() == 0) {
            return res;
        }
        char[] c = str.toCharArray();
        find(c, 0);
        // 字典序
        Collections.sort(res);
        return res;
    }
    public void find(char[] c, int index) {
        if (index >= c.length) {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < c.length; i++) {
                sb.append(c[i]);
            }
            String t = sb.toString();
            // 去重
            if (!res.contains(t)) {
                res.add(t);
            }
        }
        for (int i = index; i < c.length; i++) {
            swap(c, i, index);
            find(c, index + 1);
            swap(c, i, index);
        }
    }
    public void swap(char[] c, int i, int j) {
        char t = c[i];
        c[i] = c[j];
        c[j] = t;
    }
}