描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
示例1
输入:
"ab"
复制返回值:
["ab","ba"]
public class Jz27_Permutation {
private HashSet<String> set = new HashSet<>();
@Test
public void test() {
}
public ArrayList<String> Permutation(String str) {
if (null == str || "" == str) {
return new ArrayList<>();
}
solve(str.toCharArray(), 0);
ArrayList<String> ans = new ArrayList<>(set);
ans.sort((a, b) -> {
return a.compareTo(b);
});
return ans;
}
public void solve(char[] arr, int pos) {
for (int i = pos; i < arr.length; i++) {
swap(arr, i, pos);
solve(arr, pos + 1);
set.add(new String(arr));
swap(arr, i, pos);
}
}
public void swap(char[] arr, int i, int j) {
char a = arr[i];
arr[i] = arr[j];
arr[j] = a;
}
}