题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 题目链接
AC代码:
import java.util.ArrayList;
import java.util.TreeSet;
public class Solution {
public ArrayList<String> Permutation(String str) {
ArrayList<String> res = new ArrayList<>();
if (str == null || str.length() == 0)
return res;
TreeSet<String> temp = new TreeSet<>();
fun(str.toCharArray(), 0, temp);
res.addAll(temp);
return res;
}
public void fun(char[] array, int i, TreeSet<String> result) {
if (i == array.length - 1) {//找到一个答案
result.add(new String(array));
} else {//递归往下找,但注意回溯用来保持原来的状态
for (int j = i; j < array.length; j++) {
swap(array, i, j);
fun(array, i + 1, result);
swap(array, i, j);
}
}
}
public void swap(char[] array, int i, int j) {
char temp = array[j];
array[j] = array[i];
array[i] = temp;
}
}
TreeSet<String> result
在这里不是去除重复答案,而是用来对答案进行字符顺序排序。