输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
class Solution {
ArrayList<String> res = new ArrayList<>();
char[] c;
public String[] permutation(String s) {
c = s.toCharArray();
dfs(0);
return res.toArray(new String[res.size()]);
}
public void dfs(int x){
if(x == c.length - 1){
res.add(String.valueOf(c));
return;
}
HashSet<Character> set = new HashSet<>();
for(int i = x;i < c.length;i++){
if(set.contains(c[i])){
continue;
}
set.add(c[i]);
swap(x,i);
dfs(x+1);
swap(i,x);
}
}
public void swap(int i, int j){
char temp = c[i];
c[i] = c[j];
c[j] = temp;
}
}
执行用时:6 ms, 在所有 Java 提交中击败了97.39%的用户
内存消耗:45.7 MB, 在所有 Java 提交中击败了92.51%的用户
通过测试用例:52 / 52