剑指Offer—27—字符串的排列

来源:互联网 发布:mysql主键和外键作用 编辑:程序博客网 时间:2024/06/05 10:34

字符串的排列——输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符 a, b, c 所能排列出来的所有字符串 abc, acb, bac, bca, cab 和 cba。(输入一个字符串,长度不超过 9 (可能有字符重复),字符只包括大小写字母。)

package A27字符串的排列;import java.io.BufferedWriter;import java.util.ArrayList;import java.util.Collections;import java.util.HashSet;import java.util.List;import java.util.Set;public class Solution {    public ArrayList<String> Permutation(String str) {        char[] arr = new char[str.length()];        for(int i=0;i<str.length();i++){            arr[i] = str.charAt(i);        }        ArrayList<String> list = new ArrayList<>();        test(arr, 0, str.length()-1,list);        Set<String> set = new HashSet<>();        set.addAll(list);        list.clear();        list.addAll(set);        return list;    }    public void test(char[] arr, int start, int end,ArrayList<String> list){        if (start == end) {            StringBuilder stringBuilder = new StringBuilder();            for(int i=0;i<arr.length;i++){                stringBuilder.append(arr[i]);            }            list.add(stringBuilder.toString());        }        for(int i=start;i<=end;i++){            char temp = arr[start];            arr[start] = arr[i];            arr[i] = temp;            test(arr, start+1, end,list);            temp = arr[start];            arr[start] = arr[i];            arr[i] = temp;        }    }    public static void main(String[] args) {        Solution solution = new Solution();        char[] arr = {'a','b','c'};        ArrayList<String> list = new ArrayList<>();        ArrayList<String> list2 = solution.Permutation("aa");        for (String string : list2) {            System.out.println(string);        }    }}