剑指Offer系列-面试题28:字符串的排列

    xiaoxiao2021-03-25  74

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

    思路:

    代码:

    public ArrayList<String> Permutation(String str) {     ArrayList<String> list = new ArrayList<String>();     // 输入合法性判断     if (str == null || str.isEmpty()) {         return list;     }     // set去重     HashSet<String> set = new HashSet<String>();     fun(set, str.toCharArray(), 0);     list.addAll(set);     // 排序     Collections.sort(list);     return list; } /** * @param set * @param str * @param num num处的字符串依次和后面的交换 */ private void fun(HashSet<String> set, char[] str, int num) {     // 已经全部交换过,结束     if (num == str.length) {         set.add(new String(str));         return;     }     for (int i = num ; i < str.length ; i++) {         swap(str, i, num);         fun(set, str, num + 1);         // 交换位置后要重新交换回来         swap(str, i, num);     } } void swap(char[] str, int i, int j) {     if (i != j) {         char tmp = str[i];         str[i] = str[j];         str[j] = tmp;     } }

    转载请注明原文地址: https://ju.6miu.com/read-36993.html

    最新回复(0)