字符串的排列

来源:互联网 发布:手机淘宝6.6.0版本 编辑:程序博客网 时间:2024/06/09 15:03


Description:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。


import java.util.ArrayList;import java.util.Arrays;public class Solution {    public ArrayList<String> Permutation(String str) {        char[] ch = str.toCharArray();        Arrays.sort(ch);        ArrayList<String> list = new ArrayList<>();        if (str == null || str.length() <= 0) return list;        StringBuilder s = new StringBuilder();        boolean[] vis = new boolean[ch.length];        backtrack(list, s, ch, vis, ch.length);        return list;    }    public void backtrack(ArrayList list, StringBuilder s, char[] ch, boolean[] vis, int n) {        if (s.length() == n) {            list.add(s.toString());            return ;        }        for (int i = 0; i < n; i++) if (!vis[i]){            if (i > 0 && ch[i] == ch[i-1] && !vis[i-1]) continue;            s.append(ch[i]);            vis[i] = true;            backtrack(list, s, ch, vis, n);            s.deleteCharAt(s.length() - 1);            vis[i] =false;        }    }}