问题描述
输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
示例:
输入:s = “abc”
输出:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”]
问题解决
考虑全排列的解决思路,使用回溯的方法
class Solution {
Set<String> set = new HashSet<>();
StringBuilder sb = new StringBuilder();
public String[] permutation(String s) {
if(s == null || s.length() == 0) return new String[0];
boolean[] used = new boolean[s.length()];
trackback(s, used);
String[] res = new String[set.size()];
res = set.toArray(res);
return res;
}
public void trackback(String s, boolean[] used) {
if(sb.length() == s.length()) {
set.add(sb.toString());
return;
}
for(int i = 0; i < s.length(); i++) {
if(used[i]) continue;
sb.append(s.charAt(i));
used[i] = true;
trackback(s, used);
sb.deleteCharAt(sb.length() - 1);
used[i] = false;
}
}
}