输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
示例:
输入:s = "abc"
输出:["abc","acb","bac","bca","cab","cba"]
class Solution {
List<String> res = new LinkedList<>();
char[] chs;
public String[] permutation(String s) {
chs = s.toCharArray();
dfs(0);
return res.toArray(new String[res.size()]);
}
public void dfs(int x) {
if (x == chs.length - 1) {
res.add(String.valueOf(chs));
return;
}
Set<Character> set = new HashSet<>();
for (int i = x; i < chs.length; i++) {
if (set.contains(chs[i])) continue;
set.add(chs[i]);
swap(i, x);
dfs(x+1);
swap(x, i);
}
}
public void swap(int i, int j) {
char tmp = chs[i];
chs[i] = chs[j];
chs[j] = tmp;
}
}
剑指 Offer 32 - II. 从上到下打印二叉树 II
剑指 Offer 32 - III. 从上到下打印二叉树 III