原题链接
输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
示例:
输入:s = “abc”
输出:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”]
限制:
1 <= s 的长度 <= 8
Related Topics 回溯算法
274 0
递归函数要点:
class Solution {
List<String> ans;
char[] ss;
public String[] permutation(String s) {
ss = s.toCharArray();
ans = new ArrayList<>();
dfs(0);
return ans.toArray(new String[0]);
}
public void dfs(int x) {
if (x == ss.length - 1) {
ans.add(String.valueOf(ss));
return;
}
Set<Character> set = new HashSet<>();
for (int i = x; i < ss.length ; i++) {
if (set.contains(ss[i])) {
continue;
}
set.add(ss[i]);
swap(x, i);
dfs(x + 1);
swap(i, x);
}
}
public void swap(int a, int b) {
char temp = ss[a];
ss[a] = ss[b];
ss[b] = temp;
}
}
参考:
剑指 Offer 38. 字符串的排列(回溯法,清晰图解)