符串的排列

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
 
 1 import java.util.*;
 2 public class Solution {
 3     public ArrayList<String> Permutation(String str) {
 4         ArrayList<String> re = new ArrayList<String>();
 5         if (str == null || str.length() == 0) {
 6             return re;
 7         }
 8         HashSet<String> set = new HashSet<String>();
 9         fun(set, str.toCharArray(), 0);
10         re.addAll(set);
11         Collections.sort(re);
12         return re;
13     }
14     void fun(HashSet<String> re, char[] str, int k) {
15         if (k == str.length) {
16             re.add(new String(str));
17             return;
18         }
19         for (int i = k; i < str.length; i++) {
20             swap(str, i, k);
21             fun(re, str, k + 1);
22             swap(str, i, k);
23         }
24     }
25     void swap(char[] str, int i, int j) {
26         if (i != j) {
27             char t = str[i];
28             str[i] = str[j];
29             str[j] = t;
30         }
31     }
32 }

 

 
 
posted @ 2017-02-27 15:51  alittlecomputer  阅读(275)  评论(0编辑  收藏  举报