输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
算法实现如下
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
public class Solution {
public ArrayList<String> Permutation(String str) {
if (null == str || "".equals(str)) {
return new ArrayList<>();
}
char[] ch = str.toCharArray();
Arrays.sort(ch);
// 使用HashSet避免重复,如aa的排列只有aa
HashSet<String> result = new HashSet<>();
permutation(ch, 0, result);
// 对结果排序
ArrayList<String> sortedResult = new ArrayList<>(result);
Collections.sort(sortedResult);
return sortedResult;
}
public void permutation(char[] ch, int n, HashSet<String> result) {
if (n >= ch.clone().length) {
result.add(new String(ch));
return;
}
for (int i = 0; i <= ch.length-1; ++i) {
char tmp = ch[i];
ch[i] = ch[n];
ch[n] = tmp;
permutation(ch, n + 1, result);
tmp = ch[i];
ch[i] = ch[n];
ch[n] = tmp;
}
}
public static void main(String[] args) {
Solution s = new Solution();
ArrayList<String> result= s.Permutation("abcdef");
System.out.println(result);
}
}